你需要了解的HTTP協議

AALMIX發表於2019-07-02

你需要了解的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 響應

和檢視請求格式類似

相關文章