HTTP的首部字段都包括什么获洲?
HTTP請求報文: method / url / HTTP版本號 / header / body
也就是請求行矛双、 請求頭 程拭、 請求體
HTTP響應(yīng)報文: http 版本號 / 狀態(tài)碼 / headers / body
響應(yīng)行/ 響應(yīng)頭部/響應(yīng)體
request headers
- 請求首部字段
- 通用首部字段
- 實體首部字段
response headers
- 響應(yīng)首部字段
- 通用首部字段
- 實體首部字段
一共有4種首部字段建蹄,下面會一一介紹
- 通用首部字段:請求報文和響應(yīng)報文都使用的字段讼渊,例如Date 动看、 Warning
- 請求報文字段:從客戶端向服務(wù)端發(fā)送請求報文時使用的首部字段,例如Host (請求資源所在服務(wù)器) User-Agent(HTTP客戶端程序信息)
- 響應(yīng)報文字段:從服務(wù)端想客戶端發(fā)送響應(yīng)報文時使用的首部字段,例如 Server
- 實體報文字段: 專門針對請求包文和響應(yīng)報文的實體部分爪幻,使用的字段菱皆,例如Content-Length / Content-Type
實際的HTTP通信中须误,不限于RFC2616中定義的47種字段,還包括Cookie仇轻、Set-Cookie等
一 通用首部字段介紹
- Cache-Control : no-cache 設(shè)置 我們?nèi)绾慰刂凭彺?/li>
- Connection: keep-alive
- 設(shè)置不再轉(zhuǎn)發(fā)給代理的首部字段京痢,比如connection: Upgrade 的意思就是,首部字段刪除掉Upgrade后篷店,再轉(zhuǎn)發(fā)
- 管理持久鏈接祭椰。
http1.1默認都是持久鏈接,例如 Connection: keep-alive
如果服務(wù)端想明確的斷開鏈接疲陕,可以設(shè)置 Connection: close
- Date 這當然也屬于通用首部字段方淤,表明創(chuàng)建HTTP報文的日期
- Pragma 是HTTP1.1之前版本的歷史遺留字段。
它的取值很單一蹄殃,就是表示客戶端要求携茂,所有的中間服務(wù)器不要返給我緩存的資源
Pragma: no-cache
理想情況下,所有的中間服務(wù)器都是基于HTTP1.1協(xié)議的話窃爷,我們只用
Cache-Control: no-cache
可是實際開發(fā)中邑蒋,一般我們發(fā)送請求會2個首部字段都寫上
Pragma: no-cache
Cahche-Control: no-cache
- Tailer 事先說明報文主體后,記錄了哪些首部字段按厘。
- Transfer-Encoding医吊。 規(guī)則了傳輸報文主體時采用的編碼方式
Transfer-Encoding: chunked
Upgrade 用于檢測HTTP協(xié)議,是否可使用更高版本的協(xié)議
Via 該字段用于追蹤傳輸路徑逮京,因為經(jīng)過每一個代理服務(wù)器時卿堂,都有在via字段,留下自身服務(wù)器的信息
Warning 告知用戶一些與緩存相關(guān)的警告
Warning: [警告碼] [警告主機: 端口號] [ 警告內(nèi)容] [日期]
二 請求首部字段
- Accept 客戶端用該字段懒棉,指定服務(wù)器返回的文件類型
例如:
文本文件 text/html , text/plain , text/css
圖片文件 image/jpeg image/gif
應(yīng)用程序使用的二進制文件: application/octet-stream , application/zip
可以使用q= 可以指定優(yōu)先級草描,默認q=1
Accept-Charset 用于通知服務(wù)器,我們需要的字符集策严,以及字符集優(yōu)先級
Accept-Encoding 告知服務(wù)器穗慕,代理支持的內(nèi)容編碼
Accept-Language: 告知服務(wù)器,我們能夠處理的自然語言妻导,用q=0.8 來設(shè)置優(yōu)先級
Auothorization 告知服務(wù)器逛绵,用戶代理的認證信息
Expect 告知服務(wù)器,期望服務(wù)器出現(xiàn)的某種行為
Expect: 100-continue
等待狀態(tài)碼100響應(yīng)的客戶端在發(fā)生請求時倔韭,就需要指定這個字段
- From 用來告知服務(wù)器术浪,用戶的電子郵件地址
- Host (唯一一個必須被包含的字段 ) 告知服務(wù)器,請求資源所在的主機名和端口號
- If-xxx 這類的請求首部字段寿酌,都可稱為條件請求胰苏,滿足一定條件,服務(wù)器才會執(zhí)行請求醇疼。
例如:
If-Match
If-Modified-Since
If-None-Match
If-Range
If--Unmodifield-Since
- Range 告知服務(wù)器請求資源的范圍
- Referer 告訴服務(wù)器請求的原始資源的URI
- User-Agent 告訴服務(wù)器硕并,創(chuàng)建請求的瀏覽器和用戶代理名稱等信息
三 響應(yīng)首部字段
- Accept-Ranges 用來告訴瀏覽器法焰,服務(wù)器是否可以處理范圍請求
Accept-Ranges: none // 不能處理
Accept-Ranges:bytes // 可以處理
- Age 告訴瀏覽器,服務(wù)器在多久之前創(chuàng)建了響應(yīng)
- ETag字段 告知客戶端的實體標識倔毙。
每次資源被緩存時壶栋,都會被分配一個唯一的標識。
當資源發(fā)生變化時普监,這個ETag也會對應(yīng)的發(fā)生改變。
ETag值也分強弱琉兜,強ETag值只要發(fā)生一點變化就會改變凯正,弱ETag只在發(fā)生較大變化才改變
Location字段 。用來做重定向的豌蟋,幾乎所有瀏覽器在接受到包含Location的響應(yīng)后廊散,都會強制性地嘗試對重定向資源進行訪問。
Proxy-Authenticate 會把代理服務(wù)器要求的認證信息發(fā)送給客戶端
Retry-After 指定瀏覽器梧疲,應(yīng)該在多少秒后允睹,再次發(fā)起請求
Server字段 告知瀏覽器,當前服務(wù)器上安裝的http服務(wù)器應(yīng)用程序的信息
Vary字段幌氮。 vary字段可以對緩存進行控制
當代理服務(wù)器接受到帶有Vary字段的請求時缭受,如果使用的Accept-Language字段相同,那么就直接從緩存中返回響應(yīng)该互,如果不一致米者,就先從原服務(wù)器獲取資源后,才能作為響應(yīng)返回
- WWW-Authenticate 用于HTTP訪問認證
四 實體首部字段
在請求報文和響應(yīng)報文中宇智,都包含著實體相關(guān)信息的首部字段
- Allow字段
Allow: GET,HEAD
用于通知客戶端蔓搞,能支持請求的所有HTTP方法
- Content-Encoding字段 通知客戶端,服務(wù)器對實體選用的內(nèi)容編碼方式
Content-Encoding: gzip
告知瀏覽器随橘,我已經(jīng)對實體的主體部分進行了gzip壓縮喂分,之后的解壓就麻煩你了
- Content-Language字段 告知瀏覽器,實體主體使用的自然語言
- Content-Length 字段 告知瀏覽器實體主體部分的大谢帷(單位是字節(jié))
- Content-MD5字段 客戶端會將接受到的主體執(zhí)行相同的MD5算法蒲祈,然后與該字段比較
- Content-Range
- Content-Type 說明了實體主體內(nèi)對象的媒體類型
類似請求首部字段Accept
- Expires(到期) 將資源失效的日期告知客戶端。
- Last-Modifield字段蜒车。 指明資源最終修改的時間
五 為Cookie服務(wù)的首部字段
共2個字段讳嘱,一個在請求頭,一個在響應(yīng)頭
- Set-Cookie 字段 是響應(yīng)首部字段酿愧,有一些屬性
1.expires 屬性 指定瀏覽器可發(fā)送Cookie的有效期
如果不設(shè)置就默認瀏覽器關(guān)閉沥潭,Cookie就過期。
2.path屬性 指定
3. domain屬性
4.secure屬性嬉挡,用于限制web頁面只有在HTTPS安全鏈接時钝鸽,才可以發(fā)送Cookie
5.HttpOnly屬性汇恤,可以時JS無法操作Cookie,所以可以用來防止跨站腳本攻擊(XSS)
- Cookie 字段
六 其他首部字段
HTTP的首部字段是可以自行擴展的拔恰,所以在Web服務(wù)器和瀏覽器的應(yīng)用上因谎,會出現(xiàn)各種非標準的首部字段。以下是比較常見的自己擴展的首部字段
- X-Frame-Options字段 屬于【響應(yīng)首部字段】
用于控制網(wǎng)站內(nèi)颜懊,在其他網(wǎng)站的Frame標簽內(nèi)的顯示問題财岔。其主要目的是為了防止點擊劫持攻擊
有2個字段值
X-Frame-Options: DENY 拒絕
X-Frame-Options:SAMEORIGIN 僅同源域名下的頁面匹配時許可
- X-XSS-Protection 字段也屬于【響應(yīng)首部字段】
X-XSS-Protection: 0 關(guān)閉XSS過濾設(shè)置
X-XSS-Protection: 1 開啟XSS的過濾設(shè)置
- P3P屬于【響應(yīng)首部字段】
- DNT字段 屬于 【請求首部字段】 Do Not Track 意思是拒絕個人信息被手機
設(shè)置為0同意被追蹤,1拒絕被追蹤
由于DNT的功能具備有效性河爹,所以Web服務(wù)器需要對DNT做好對應(yīng)的支持