你需要了解的HTTP協議


了解HTTP協議

HTTP (超文本傳輸協議,HyperText Transfer Protocol),是一種用於分布式、協作式和超媒體信息系統的應用層協議。HTTP 是萬維網的數據通信基礎。

通常,由 HTTP 客戶端(例如:瀏覽器)發起一個 GET 請求,創建一個到服務器指定端口(默認是 80 端口)的 TCP 連接。HTTP 服務器則在那個端口監聽客戶端的請求。一旦收到請求,服務器會向客戶端返回一個狀態,比如"HTTP/1.1 200 OK",以及返回的內容,如請求的文件、錯誤消息、或者其它信息。

請求方法

HTTP/1.1 協議中共定義了八種方法,以不同的方式操作指定的資源

  • GET
    • 從服務器取出資源(一項或多項)。
  • POST
    • 向指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中。這個請求可能會創建新的資源或修改現有資源,或二者皆有
  • PUT
    • 在服務器更新資源(客戶端提供改變后的完整資源)。
  • DELETE
    • 從服務器刪除資源。
  • PATCH
    • 在服務器更新資源(客戶端提供改變的屬性)。
  • HEAD
    • 請求獲取由Request-URI所標識的資源的響應消息報頭
  • OPTIONS
    • 請求查詢服務器的性能,或者查詢與資源相關的選項和需求
  • TRACE
    • 請求服務器回送收到的請求信息,主要用於測試或診斷
  • CONNECT
    • HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。通常用於SSL加密服務器的鏈接(經由非加密的HTTP代理服務器)

HTTP 請求

請求報文格式

發出的請求信息包括以下四個部分

  1. 請求行
  2. 請求頭
  3. 空行
  4. 其它消息體
# 請求格式
1 動詞 路徑 協議/版本   GET /Search HTTP/1.1
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3 
4 要上傳的數據 
## GET請求的報文格式
GET /pay?test=aaaa HTTP/1.1
Host: localhost:8088
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept: */*
Referer: http://localhost:8088/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

## POST 請求的報文格式
POST /pay?test=aaaa HTTP/1.1
Host: localhost:8088
Connection: keep-alive
Content-Length: 0
Origin: http://localhost:8088
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept: */*
Referer: http://localhost:8088/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

注意

  1. 請求最多包含四部分,最少包含三部分。(也就是說第四部分可以為空)
  2. 第三部分永遠都是一個回車\n
  3. 動詞有 GET POST PUT PATCH DELETE HEAD OPTIONS
  4. 這里的路徑包括「查詢參數」,但不包括「錨點」
  5. 如果你沒有寫路徑,那么路徑默認為 /
  6. 第 2 部分中的 Content-Type 標注了第 4 部分的格式
  7. HTTP/1.1協議中,所有的請求頭(第 2 部分),除Host外,都是可選的

如何用 Chrome 瀏覽器中查看 HTTP 請求

  1. 按下F12或右鍵檢查元素進入 開發者工具
  2. 進入 Network 面板
  3. 地址欄輸入網址
  4. Network 點擊,查看 Request Headers,默認工具已經幫你解析好了,點擊「view source」可以查看原始的請求格式
  5. 如果有請求的第四部分,那么在 FormData 或 Request Payload 里面可以看到

HTTP 響應

在接收和解釋請求消息后,服務器返回一個HTTP響應消息.

響應報文格式

HTTP響應也是由四個部分組成,分別是:

  1. 狀態行
  2. 消息報頭
  3. 空行
  4. 響應正文
1 協議/版本號 狀態碼 狀態解釋   HTTP/1.1 200 OK
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 響應的內容
## GET 請求的響應報文
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html

<!DOCTYPE html>
<html> <head> 后面太長,省略了……

## POST請求的響應報文
HTTP/1.1 200 OK
Date: Tue, 11 Jun 2019 07:22:56 GMT
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Transfer-Encoding: chunked

xxxxName.call(undefined, {"success": true, "remain": 35})

狀態碼解釋

  • 1xx消息——請求已被服務器接收,繼續處理
  • 2xx成功——請求已成功被服務器接收、理解、並接受
  • 3xx重定向——需要后續操作才能完成這一請求
  • 4xx請求錯誤——請求含有詞法錯誤或者無法被執行
  • 5xx服務器錯誤——服務器在處理某個正確請求時發生錯誤
200 請求成功
201 服務器創建了新的資源
202 已接受,服務器已接受請求,但尚未處理
204 服務器成功處理了請求,但是沒有返回任何東西

301 永久移動), 請求的網頁已永久移動到新位置。 服務器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置
302 臨時移動) ,服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。
304 資源未修改, 自從上次請求后,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。
400 錯誤請求,服務器不理解請求的語法
401 沒有權限,請求要求身份驗證。 對於需要登錄的網頁,服務器可能返回此響應。
403 禁止訪問,服務器拒絕請求
404 資源未找到
405 HTTP請求方法被禁用
408 請求超時
412 請求實體過大
500 服務器內部錯誤
502 錯誤網關
503 服務不可用
504 網關超時

如何用 Chrome 查看 HTTP 響應

和查看請求格式類似


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM