Header解析


不管是作為后端還是前端開發人員,對於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:請求獲取由Request-URI所標識的資源的響應消息報頭
    CONNECT:保留
    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)對於nginx自定義的狀態碼(499:客戶端斷開連接,大部分情況是服務器響應超時導致)
    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 消息主體大小 (byte)
  • 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>
    詳情參考

     


免責聲明!

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



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