Header解析

無論是做爲後端仍是前端開發人員,對於web請求的過程和參數都是須要了解的。javascript

下面是對一次簡單的http請求的header分析,做爲本身的一個總結,也但願對你們有所幫助。css

以Chrome爲例:html

 

咱們對header的參數挨個分析前端


 Generaljava

  • 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/Methodsnginx

  • 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/Statusweb

  • 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>
    詳情參考
相關文章
相關標籤/搜索