Linux-http協議及報文頭部結構-狀態碼總結
阿新 • • 發佈:2022-05-20
瀏覽器訪問網頁的過程
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: 閘道器超時