不管是作為後端還是前端開發人員,對於web請求的過程和參數都是需要瞭解的。 下麵是對一次簡單的http請求的header分析,作為自己的一個總結,也希望對大家有所幫助。 以Chrome為例: 我們對header的參數挨個分析 General Request URL: http://localhost ...
不管是作為後端還是前端開發人員,對於web請求的過程和參數都是需要瞭解的。
下麵是對一次簡單的http請求的header分析,作為自己的一個總結,也希望對大家有所幫助。
以Chrome為例:
我們對header的參數挨個分析
General
- Request URL: http://localhost:88/ 這裡需要瞭解的是URI的結構,URI和URL詳細請參考這裡
需要註意的地方:錨點(永遠不會發到伺服器端)
URI和URL的區別:URL是URI最常見的一種形式,URL的協議(http/https/ssh/ftp/wss/mailto) - Request Method: GET
請求方法除了常見的GET,POST,PUT,DELETE,還包括如下:
HEAD,CONNECT,PATCH,OPTIONS,TRACE參考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods
- Status Code: 200 OK
狀態碼需要瞭解的大致如下: 1xx:伺服器收到信息,等待請求者繼續(100:contine,101:協議切換) 2xx:接受並操作成功(200,201:Created,202:Accepted-可能交給其它進程處理,203 Non-Authoritative Information,204:No Content, 205:Reset Content,206:Partial Content) 3**:重定向(300 Multiple Choice,301 Moved Permanently,302 Found,303 See Other,304 Not Modified,305 Use Proxy, 306 unused,307 Temporary Redirect,308 Permanent Redirect) 4xx:客戶端錯誤(400 Bad Request-語義有錯或參數錯誤,401 Unauthorized,402 Payment Required-備用,403 Forbidden-類似許可權禁止,404 Not Found, 405 Method Not Allowed,406 Not Acceptable,407 Proxy Authentication Required,408 Request Timeout,409 Conflict,410 Gone, 411 Length Required,412 Precondition Failed,413 Payload Too Large,414 URI Too Long,415 Unsupported Media Type, 416 Requested Range Not Satisfiable,417 Expectation Failed,418 I'm a teapot-好玩,421 Misdirected Request, 422 Unprocessable Entity (WebDAV),423 Locked (WebDAV),424 Failed Dependency (WebDAV),425 Too Early, 426 Upgrade Required,428 Precondition Required,429 Too Many Requests,431 Request Header Fields Too Large, 451 Unavailable For Legal Reasons) 5xx:伺服器錯誤(500 Internal Server Error,501 Not Implemented,502 Bad Gateway,503 Service Unavailable,504 Gateway Timeout, 505 HTTP Version Not Supported,506 Variant Also Negotiates,507 Insufficient Storage,508 Loop Detected (WebDAV), 510 Not Extended,511 Network Authentication Required)
參考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
- Remote Address: [::1]:88 請求地址(此處的::1是IPv6本機地址,88為埠號)
- Referrer Policy: no-referrer-when-downgrade (用於過濾referrer)
no-referrer 整個 Referer 首部會被移除。訪問來源信息不隨著請求一起發送。 no-referrer-when-downgrade (預設值) 在沒有指定任何策略的情況下用戶代理的預設行為。在同等安全級別的情況下,引用頁面的地址會被髮送(HTTPS->HTTPS),但是在降級的情況下不會被髮送 (HTTPS->HTTP)。 origin 在任何情況下,僅發送文件的源作為引用地址。例如 https://example.com/page.html 會將 https://example.com/ 作為引用地址。 origin-when-cross-origin 對於同源的請求,會發送完整的URL作為引用地址,但是對於非同源請求僅發送文件的源。 same-origin 對於同源的請求會發送引用地址,但是對於非同源請求則不發送引用地址信息。 strict-origin 在同等安全級別的情況下,發送文件的源作為引用地址(HTTPS->HTTPS),但是在降級的情況下不會發送 (HTTPS->HTTP)。 strict-origin-when-cross-origin 對於同源的請求,會發送完整的URL作為引用地址;在同等安全級別的情況下,發送文件的源作為引用地址(HTTPS->HTTPS);在降級的情況下不發送此首部 (HTTPS->HTTP)。 unsafe-url 無論是同源請求還是非同源請求,都發送完整的 URL(移除參數信息之後)作為引用地址。
接下來是Response Header
- Accept-Ranges: bytes (主要用於標示接收文件的大小範圍,比如為了斷點續傳)
參考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Ranges - Cache-Control: no-cache (註意這個緩存控制是人request和response的)
no-cache:強制確認緩存,也就是說向伺服器確實是否有緩存(使用伺服器端緩存則304)
no-store:禁止進行緩存
private:私有(同一用戶)
public:共有
max-age:緩存過期機制(秒數)- 如果沒有此參數則會檢查expires屬性,如果expires也沒有,則檢查last modified
must-revalidate:使用陳舊資源時必須向伺服器驗證(緩存驅逐瞭解下)
* 關於緩存,非常重要,詳情可參考這裡 - Connection: keep-alive
close: HTTP1.0預設 keep-alive: HTTP1.1預設,持久連接 (對於keep-alive的信息,在伺服器設置max和timeout,分別標示最大請求數,超時時間)
* 所謂長連接是指TCP連接會保持一定時間不關閉 - Content-Length: 147 消息主體大小
- Content-Type: text/html
結構:type/subtype;parameter=value,例如:text/plain;charset=UTF-8
分為兩種:Discrete types和Multipart types
比較重要的類型如下:
application/octet-stream:預設二進位文件(未知),一般用作下載文件(和Content-Disposition:attachment一起用)
text/plain,text/css,text/html,text/javascript
multipart/form-data詳情參考
- Date: Tue, 30 Apr 2019 08:33:21 GMT (響應時間,也就是報文創建的時間,註意是GMT格林威治時間)
- ETag: "5cc692d4-93" (資源版本號)
- Expires: Tue, 30 Apr 2019 08:33:20 GMT (過期時間,同樣是GMT時間)
- Last-Modified: Mon, 29 Apr 2019 05:59:48 GMT (資源最後更新時間,精確度比ETag低,備用驗證資源是否過期的機制)
- Server: nginx/1.14.2 (處理請求的軟體及其版本)
接下來是Request Header
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
告知伺服器客戶端可以處理的類型
<MIME_type>/<MIME_subtype> 單一精確的 MIME 類型, 例如text/html.
<MIME_type>/* 一類 MIME 類型, 但是沒有指明子類。 image/* 可以用來指代 image/png, image/svg, image/gif 以及任何其他的圖片類型。
*/* 任意類型的 MIME 類型
;q= (q因數權重)
值代表優先順序,用相對質量價值表示,又稱作權重。
對應Response的Content-Type -
Accept-Encoding: gzip, deflate, br (編碼格式,一般是壓縮類型,對應Response的Content-Encoding。用identity可以禁止壓縮)
- Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
客戶端可理解的自然語言和優先選擇的區域
zh-CN是區域,zh是語言,;q是權重 - Cache-Control: no-cache
基本和Response中的Cache-Control對應
如下指定可禁止緩存:Cache-Control: no-cache, no-store, must-revalidate
- Connection: keep-alive
- Host: localhost:88
- Pragma: no-cache (為了相容HTTP1.0,等同Cache-Control:no-cache)
- Upgrade-Insecure-Requests: 1 (表示客戶端優先選擇加密及帶有身份驗證的響應,並且它可以成功處理)
- User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
用來讓網路協議的對端來識別發起請求的用戶代理軟體的應用類型、操作系統、軟體開發商以及版本號
web瀏覽器的格式一般如下:
Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>
詳情參考