什么是header

HTTP協(xié)議的請求和響應(yīng)報(bào)文中必定包含HTTP首部。首部內(nèi)容為客戶端和服務(wù)器分別處理請求和響應(yīng)提供所需要的信息。對于客戶端用戶來說,這些信息中的大部分內(nèi)容都無須親自查看。
使用首部字段是為了給瀏覽器和服務(wù)器提供報(bào)文主體大小、所使用的語言、認(rèn)證信息等內(nèi)容。

header類型
根據(jù)不同上下文,可將消息頭分為:
-
Request headers: 從客戶端向服務(wù)器端發(fā)送請求報(bào)文時(shí)使用的首部。補(bǔ)充了請求的附加內(nèi)容、客戶端信息、響應(yīng)內(nèi)容相關(guān)優(yōu)先級等信息。
Accept:用戶代理可處理的媒體類型
Accept-Charset:優(yōu)先的字符集
Accept-Encoding:優(yōu)先的內(nèi)容編碼
Accept-Language:優(yōu)先的語言
Host:請求資源所在服務(wù)器
User-Agent:HTTP客戶端的信息
以Accept來講:
Accept: text/plain;q=0.3,text/html
Accept首部字段可通知服務(wù)器,用戶代理能夠處理的媒體類型及媒體類型的相對優(yōu)先級??墒褂胻ype/subtype這種形式,一次指定多種媒體類型。q代表的是權(quán)重值。
下面是一些常用的媒體類型的例子:

當(dāng)服務(wù)器提供多種內(nèi)容時(shí),將會首先返回權(quán)重值最高的媒體類型。
-
Response headers: 從服務(wù)器端向客戶端返回響應(yīng)報(bào)文時(shí)使用的首部。補(bǔ)充了響應(yīng)的附加內(nèi)容,也會要求客戶端附加額外的內(nèi)容信息。
Accept-Ranges:是否接受字節(jié)范圍要求
Age:推算資源創(chuàng)建經(jīng)過時(shí)間
Etag:資源的匹配信息
Location:令客戶端重定向值指定URI
- Entity headers: 包含有關(guān)實(shí)體主體的更多信息,比如主體長(Content-Length)度或其MIME類型。
Allow:資源可支持的HTTP方法
Content-Encoding:實(shí)體主體使用的編碼方式
Content-Language:實(shí)體主體的自然語言
Content-Length:實(shí)體主體的大?。▎挝唬鹤止?jié))
Content-Type:實(shí)體主體的媒體類型
//例子
Content-type:application/json
Content-Type:text/plain;charset=utf-8
- General headers: 同時(shí)適用于請求和響應(yīng)消息,但與最終消息主體中傳輸?shù)臄?shù)據(jù)無關(guān)的消息頭。
Cache-Control:控制緩存行為
Connection:逐跳首部,鏈接的管理
Date:創(chuàng)建報(bào)文的日期
Warning:錯誤通知,通常會告知用戶一些與緩存相關(guān)的問題的警告
如何設(shè)置header
客戶端
在發(fā)送Ajax請求(實(shí)質(zhì)是一個HTTP請求)時(shí),我們可能需要設(shè)置上述一些請求頭部信息,比如content-type、connection、cookie、accept-xxx等。xhr提供了setRequestHeader來允許我們修改請求 header。
xhr.setRequestHeader(header, value);
方法的第一個參數(shù) header 大小寫不敏感,即可以寫成
content-type,也可以寫成Content-Type,甚至寫成content-Type;Content-Type的默認(rèn)值與具體發(fā)送的數(shù)據(jù)類型有關(guān)(詳情)。setRequestHeader必須在open()方法之后,send()方法之前調(diào)用,否則會拋錯;
需要注意的是,安全起見,有些請求頭的值只能由user agent設(shè)置:forbidden header names和forbidden response header names.
服務(wù)器端
以Node.js為例
response.writeHead(狀態(tài)碼,{header鍵值對});
response.setHeader(header鍵值對);


