【干貨】具體例子講解HTTP Header

之前一篇文章,大概介紹了HTTP Headers,接下來我們看看常見的header信息和它所代表的含義。

首先打開騰訊首頁,控制臺Network。

www.qq.com請求:

Genaral Headers:

  • Request URL:http://www.qq.com/
  • Request Method:GET
  • Status Code:200 OK
  • Remote Address:127.0.0.1:8888
  • Referrer Policy:unsafe-url

Request URL:請求的URL

URL(Uniform Resource Locator即統一資源定位符),互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。

基本URL包含:模式(或稱協議)、服務器名稱(或IP地址)、路徑和文件名,如“協議://授權/路徑?查詢”。

Request Method:請求方法

常見的Request Method有:get、post、head

get和post的區別:本質上并無區別,只是http協議上對這兩個方法有些規定。比如:1、GET使用URL傳參,而POST將數據放在BODY中。2、GET的URL會有長度上的限制,則POST的數據則可以非常大。3、POST比GET安全,因為數據在地址欄上不可見。

從其他角度來看:get是Safe、Idempotent的,get更像是查詢語句,不會改變服務器任何狀態,所以他是Safe(安全)、Idempotent(冪等的)。Safe可理解為只讀,Idempotent可理解為多次訪問相等。而post不是Safe,也不是Idempotent的,post更像是insert語句,會改變服務器狀態。

從緩沖角度來看:服務端程序在接收客戶端表單提交的數據時,需要先將數據存儲到一個內存空間,然后做解析等后續工作,這個內存空間一般稱之為接收緩沖區。對于post數據因為有Content-Length標記,服務端可以按標記的長度創建一個等于或稍大于提交數據的緩沖區。對于get,因為事先不知道提交的數據有多少,需要估計緩沖區長度,如果緩沖區很大而接收數據很小會造成內存浪費,而如果緩沖區小于接收數據,就可能造成緩沖區溢出。

Status Code:狀態碼

(消息)1**:這一類型的狀態碼,代表請求已被接受,需要繼續處理。這類響應是臨時響應,只包含狀態行和某些可選的響應頭信息,并以空行結束。

(成功)2**:這一類型的狀態碼,代表請求已成功被服務器接收、理解、并接受。

(重定向)3**: 這類狀態碼代表需要客戶端采取進一步的操作才能完成請求。

(請求錯誤)4**:這類的狀態碼代表了客戶端看起來可能發生了錯誤,妨礙了服務器的處理。

(服務器錯誤)5、6:這類狀態碼代表了服務器在處理請求的過程中有錯誤或者異常狀態發生,也有可能是服務器意識到以當前的軟硬件資源無法完成對請求的處理。

Remote Address:遠程地址

一般是127.0.0.1:8888或者遠程服務器ip地址+端口號

Referrer Policy:來源管制

這個東西怎么理解呢?我研究了好一會才明白,我們知道鏈接都是跳來跳去的。當從一個鏈接跳到另一個鏈接,另一個鏈接的referer就記錄了是從哪個鏈接跳來的。Referrer Policy就是管理這個來源信息的機制。

no-referrer:整個 Referer 首部會被移除。訪問來源信息不隨著請求一起發送。

no-referrer-when-downgrade (默認值):在同等安全級別的情況下,引用頁面的地址會被發送(HTTPS->HTTPS),但是在降級的情況下不會被發送 (HTTPS->HTTP)

origin:在任何情況下,僅發送文件的源作為引用地址。例如 https://example.com/page.html 會將 https://example.com/ 作為引用地址。

unsafe-url:無論是同源請求還是非同源請求,都發送完整的 URL(移除參數信息之后)作為引用地址。

ps:就著昨天,‘www.qq.com’還是‘unsafe-url’的,今天就變成了‘no-referrer-when-downgrade’,難道我發現了什么不可告人的秘密?

Request Headers:

Accept:客戶端可以處理的內容類型,這種內容類型用MIME類型來表示

text/plain:文本文件默認值。意思是 未知的文本文件 ,瀏覽器認為是可以直接展示的。

text/css:任何一個CSS文件想要在網頁上被解釋執行就必須為text/css 文件。

text/html:HTML5統一的html格式。

image/gif、image/jpeg、image/png、image/svg+xml:圖片格式。

......

Accept-Encoding:客戶端發給服務器,聲明客戶端支持的編碼類型。默認是deflate,其余還有gzip、compress等。

gizp: GZIP常用于UNIX系統的文件壓縮。我們在Linux中經常會用到后綴為.gz的文件,它們就是GZIP格式的。現今已經成為Internet 上使用非常普遍的一種數據壓縮格式,或者說一種文件格式。

comporess:compress是一個相當古老的 unix 檔案壓縮指令,壓縮后的檔案會加上一個 .Z 延伸檔名以區別未壓縮的檔案,壓縮后的檔案可以以 uncompress 解壓。由于gzip更理想,一般用gzip。

Accept-Language:聲明客戶端可以理解的自然語言,以及優先選擇的區域方言。

Cache-Control:用于指定所有緩存機制在整個請求/響應鏈中必須服從的指令。

public:所有內容都將被緩存(客戶端和代理服務器都可緩存)
private:內容只緩存到私有緩存中(僅客戶端可以緩存,代理服務器不可緩存)
no-cache/no-store:瀏覽器需要重新發送請求。
max-age=xxx:緩存的內容將在 xxx 秒后失效, 這個選項只在HTTP 1.1可用。

Cookie:客戶端cookie(不展開)

Host:客戶端地址(不展開)

Proxy-Connection:(代理鏈接、不展開)

Referer:來源,能看到是從哪里鏈接過來的。

Upgrade-Insecure-Requests:(不展開)

User-Agent:可以看到客戶端系統版本、瀏覽器版本

Response Headers:

  • Cache-Control:max-age=60
  • Content-Encoding:gzip
  • Content-Type:text/html; charset=GB2312
  • Date:Tue, 25 Jul 2017 02:01:24 GMT
  • Expires:Tue, 25 Jul 2017 02:02:24 GMT
  • Proxy-Connection:Keep-alive
  • Server:squid/3.5.20
  • Transfer-Encoding:chunked
  • Vary:Accept-Encoding
  • Vary:Accept-Encoding
  • Vary:Accept-Encoding
  • X-Cache:MISS from shenzhen.qq.com

Content-Type:返回格式、編碼

Date:請求時間

Expires:緩存失效日期

Server:服務器代理

Transfer-Encoding:分塊編碼

X-Cache: 表示你的 http request 是由 proxy server 回的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,420評論 6 152
  • Http協議詳解 標簽(空格分隔): Linux 聲明:本片文章非原創,內容來源于博客園作者MIN飛翔的HTTP協...
    Sivin閱讀 5,252評論 3 82
  • 引言:對于HTTP屬性的一些整理,數據請求和響應就不再貼圖,隨意找個網站打開調試工具都可以看得到。注:HTTP版本...
    可愛的木頭閱讀 3,066評論 0 1
  • 本文整理自MIN飛翔博客 [1] 1. 概念 協議是指計算機通信網絡中兩臺計算機之間進行通信所必須共同遵守的規定或...
    HoyaWhite閱讀 2,704評論 2 20