1. 程式人生 > 其它 >Linux-http協議及報文頭部結構-狀態碼總結

Linux-http協議及報文頭部結構-狀態碼總結

瀏覽器訪問網頁的過程

http協議:http/0.9, http/1.0, http/1.1, http/2.0,http/3.0

http協議:stateless 無狀態, 伺服器無法持續追蹤訪問者來源

  • 解決http協議無狀態方法
    • cookie 客戶端存放
    • session 服務端存放
  • http事務:一次訪問的過程
    • 請求:request
    • 響應:response

HTTP報文結構

http請求報文

 request報文格式

<method> <request-URL> <version>
<headers>
<entity-body>

範例:

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: www.qq.com
User-Agent: HTTPie/0.9.4

HTTP響應報文

 response報文格式

<version> <status> <reason-phrase>
<headers>
<entity-body>

範例:

HTTP/1.1 200 OK
Cache-Control: max-age=3, must-revalidate
Connection: keep
-alive Content-Encoding: gzip Content-Type: text/html; charset=UTF-8 Date: Thu, 07 Nov 2019 03:44:14 GMT Server: Tengine Transfer-Encoding: chunked Vary: Accept-Encoding Vary: Accept-Encoding, Cookie

HTTP報文格式詳解

Method 方法

  • 請求方法,標明客戶端希望伺服器對資源執行的動作,包括以下:
    • GET: 從伺服器獲取一個資源
    • HEAD: 只從伺服器獲取文件的響應首部
    • POST: 向伺服器輸入資料,通常會再由閘道器程式繼續處理
    • PUT: 將請求的主體部分儲存在伺服器中,如上傳檔案
    • DELETE: 請求刪除伺服器上指定的文件
    • TRACE:追蹤請求到達伺服器中間經過的代理伺服器
    • OPTIONS:請求伺服器返回對指定資源支援使用的請求方法
    • CONNECT:建立一個到由目標資源標識的伺服器的隧道
    • PATCH:用於對資源應用部分修改

version版本

HTTP/<major>.<minor>
HTTP/1.1

headers首部欄位頭

  • 首部的分類:
    • 通用首部:請求報文和響應報文兩方都會使用的首部
    • 請求首部:從客戶端向伺服器端傳送請求報文時使用的首部。補充了請求的附加內容、客戶端資訊、 請求內容相關優先順序等資訊
    • 響應首部:從伺服器端向客戶端返回響應報文時使用的首部。補充了響應的附加內容,也會要求客 戶端附加額外的內容資訊
    • 實體首部:針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更新時間等與實體有 關的的資訊
    • 擴充套件首部
  • 通用首部:
    • Date: 報文的建立時間
    • Connection:連線狀態,如keep-alive, close
    • Via:顯示報文經過的中間節點(代理,閘道器)
    • Cache-Control:控制快取,如快取時長
    • MIME-Version:傳送端使用的MIME版本
    • Warning:錯誤通知
  • 請求首部:
    • Accept:通知伺服器自己可接受的媒體型別
    • Accept-Charset: 客戶端可接受的字符集
    • Accept-Encoding:客戶端可接受編碼格式,如gzip
    • Accept-Language:客戶端可接受的語言
    • Client-IP: 請求的客戶端IP
    • Host: 請求的伺服器名稱和埠號
    • Referer:跳轉至當前URI的前一個URL
    • User-Agent:客戶端代理,瀏覽器版本
  • 條件式請求首部:
    • Expect:允許客戶端列出某請求所要求的伺服器行為
    • If-Modified-Since:自從指定的時間之後,請求的資源是否發生過修改
    • If-Unmodified-Since:與上面相反
    • If-None-Match:本地快取中儲存的文件的ETag標籤是否與伺服器文件的Etag不匹配
    • If-Match:與上面相反
    • 安全請求首部:
      • Authorization:向伺服器傳送認證資訊,如賬號和密碼
      • Cookie: 客戶端向伺服器傳送cookie
    • 代理請求首部:
      • Proxy-Authorization: 向代理伺服器認證
  • 響應首部:
    • 資訊性:
      • Age:從最初建立開始,響應持續時長
      • Server:伺服器程式軟體名稱和版本
      • 協商首部:某資源有多種表示方法時使用
      • Accept-Ranges:伺服器可接受的請求範圍型別
      • Vary:伺服器檢視的其它首部列表
    • 安全響應首部:
      • Set-Cookie:向客戶端設定cookie
      • WWW-Authenticate:來自伺服器對客戶端的質詢列表
  • 實體首部:
    • Allow: 列出對此資源實體可使用的請求方法
    • Location:告訴客戶端真正的實體位於何處
    • Content-Encoding:對主體執行的編碼
    • Content-Language:理解主體時最適合的語言
    • Content-Length: 主體的長度
    • Content-Location: 實體真正所處位置
    • Content-Type:主體的物件型別,如text
    • 快取相關:
      • ETag:實體的擴充套件標籤
      • Expires:實體的過期時間
      • Last-Modified:最後一次修改的時間

http協議狀態碼分類

1xx:100-101 資訊提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 錯誤類資訊,客戶端錯誤
5xx:500-505 錯誤類資訊,伺服器端錯誤

http協議常用的狀態碼

200: 成功,請求資料通過響應報文的entity-body部分發送;OK
301: 請求的URL指向的資源已經被刪除;但在響應報文中通過首部Location指明瞭資源現在所處的新位
置;Moved Permanently
302: 響應報文Location指明資源臨時新位置 Moved Temporarily
304: 客戶端發出了條件式請求,但伺服器上的資源未曾發生改變,則通過響應此響應狀態碼通知客戶端;
Not Modified
307: 瀏覽器內部重定向
401: 需要輸入賬號和密碼認證方能訪問資源;Unauthorized
403: 請求被禁止;Forbidden
404: 伺服器無法找到客戶端請求的資源;Not Found
500: 伺服器內部錯誤;Internal Server Error
502: 代理伺服器從後端伺服器收到了一條偽響應,如無法連線到閘道器;Bad Gateway
503: 服務不可用,臨時伺服器維護或過載,伺服器無法處理請求
504: 閘道器超時