響應首部字段
響應的頭部字段很大一部分跟請求是對應的,客戶端提了自己的訴求并根據(jù)優(yōu)先級列舉,服務端會根據(jù)自身情況選擇一種回復客戶端,這種過程就叫做內(nèi)容協(xié)商(content negotiation)。內(nèi)容協(xié)商的字段一般請求的首部是 Accept 開頭,而響應的首部是 Content 開頭。
1. Content-Encoding
告知客戶端內(nèi)容的編碼方式:
Content-Encoding: gzip
2. Content-Language
告知客戶端返回內(nèi)容的語言:
Content-Language: zh-CN
3. Content-Length
告知客戶端內(nèi)容的長度:
Content-Length: 5106
4. Content-Location
客戶端請求某個 URL 資源,通過內(nèi)容協(xié)商 比如:Accept-Language,后端會有對應的 URL_language 更具體的資源路徑。此時響應的 Content-Location 就是后端具體的資源位置。
5. Location
Location 跟 Content-location 是沒什么關(guān)系的,Location 主要是在重定向的場景中表明訪問的原始 URL 是什么。
6. Content-MD5
告訴客戶端響應內(nèi)容按照 MD5 簽名后的值是什么,客戶端根據(jù)返回內(nèi)容也按照MD5算法生產(chǎn)一個 MD5值。如果兩者的值一樣證明傳輸過程中 Http 的內(nèi)容沒有被篡改過,否則就代表內(nèi)容可能被人偽造過,是不可信的。
7. Content-Range
斷點續(xù)傳中,告知客戶端返回的內(nèi)容范圍,字段值以字節(jié)為單位。
8. Accept-Ranges
告知客戶端服務器是否能處理范圍 請求,以指定獲取服務器端某個部分的資源??芍付ǖ淖侄沃涤袃煞N,可處理范圍請求時指定其為 bytes,反之 則指定其為 none。
9. Content-Type
Content-Type: text/html; charset=UTF-8
告知客戶端,響應內(nèi)容的媒體類型,如 Json 報文/ Html 文件 / JavaScript 腳本 / 圖片 / 視頻 等。
10. Age
Age 主要記錄的是代理服務器跟原站的響應時間差,如果 Age: 0,它可能只是從原始服務器獲取; 否則它通常是根據(jù)代理的當前日期和Date HTTP 響應中包含的通用頭部之間的差異來計算的。
11. ETag
告知客戶端實體標識。
12. Proxy-Authenticate
把由代理服務器所要求的認證信息 發(fā)送給客戶端。
13. WWW-Authenticate
告知客戶端所指定資源的認證方案(Basic 或是 Digest),狀態(tài)碼 401 Unauthorized 響應中,肯定 帶有首部字段 WWW-Authenticate。
WWW-Authenticate: Basic realm="Usagidesign Auth"
14. Retry-After
告知客戶端應該在多久之后再次發(fā)送請求。主 要配合狀態(tài)碼 503 Service Unavailable 響應,或 3xx Redirect 響應一起 使用。
15. Server
告知客戶端服務器所使用的 Web 服務軟件及版本信息,該字段盡量不要暴露,否則會有安全問題。假設黑客知道你用的是 Tomcat 并且是 XX 版本,他就會去查找這個 Tomcat 版本的軟件有什么漏洞,然后攻擊你的服務器。
16. Vary
主要是在緩存場景中使用,一般我們都說 URL 是可以唯一定位一個資源的,其實不完全正確,比如 客戶端對語言不同需求,同一個 URL 可能得到不同的資源。緩存服務器會配合 Vary 字段判斷哪些需要緩沖。
Vary: Accept-Language
可以避免用戶訪問是英文的資源請求,而服務端將之前緩存的中文資源提供給客戶。
17. Expires
告知客戶端資源失效的日期,如果是緩存服務器會在 Expires 指定的時間到了才會額外發(fā)起請求。
18. 小結(jié)
響應首部信息通常標志了請求資源的屬性,如過期時間是什么時候,資源編碼,請求是否經(jīng)過代理等。