HTTP報文 = 報文首部 + '空行(CR+LF)' + 報文主體
複製代碼
HTTP首部字段是構成HTTP報文的要素之一。在客戶端和服務器端以HTTP協議進行通訊的過程當中,不管是請求仍是響應:都會使用首部字段,它能起到傳遞額外重要信息的做用。
javascript
// 操做緩存的工做機制。參數使用`,`分割
Cache-Control: private, max-age=0, no-cache
複製代碼
public : 代表其餘用戶能夠利用緩存
css
private: 代表只能特定用戶
做爲對象(與public相反)。緩存服務器會對特定用戶提供緩存的服務,對於其餘用戶發過來的請求,代理服務器不會返回緩存。
html
no-cache:從字面意義上很容易誤解爲不緩存,可是no-cache表明不緩存過時的資源,緩存會向服務器進行有效處理確認以後處理資源
java
no-cache
,表示不接受緩存過的響應。中間
緩存服務器必須將客戶端請求
轉發給源服務器
服務器
返回中包含no-cache
,代表緩存服務器不能對資源進行緩存,而且之後再也不對緩存服務器提出的資源有效性進行確認。服務器
返回的no-cache=Location
,指定了具體參數值,客戶端接收到這個指定參數值的首部字段對應的響應報文後
,不能使用緩存。若是服務器返回的no-cache
無參數的首部字段是能夠緩存的。no-store: 規定緩存不能再本地存儲請求或響應的一部分。
算法
s-maxage(單位秒): s-maxage
指令的功能和 max-age
指令的相同,但s-maxage
只適用於供多位用戶使用的公共緩存服務器(通常指代理)
,該指令存在會直接接忽略對Expires 首部字段
及max-age 指令
的處理。
瀏覽器
max-age(單位秒): HTTP/1.1的緩存服務器遇到max-age
指令,會忽略Expires
首部,HTTP/1.0下相反
緩存
客戶端
發起請求包含max-age
指令,若是資源緩存時間
比指定的時間小
,客戶端接收緩存資源。若是max-age=0
,緩存服務器須要將請求轉發給源服務器服務端
返回響應包含max-age
指令,緩存服務器將不對資源有效性進行再次確認,max-age
表明緩存最長時間min-fresh(單位秒): 要求緩存服務器返回小於指定時間
的緩存資源。例如min-fresh=60
,過了60秒的資源沒法做爲響應返回。
安全
max-stale(單位秒):緩存的資源即便過時
了也照常接收。bash
max-stale
指定的時間內,仍會被客戶端接收。only-if-cached: 表示客戶端 請求資源 僅在緩存服務器本地 存在緩存
,不須要緩存服務器從新加載響應,也不須要確認資源有效性直接返回,若是不存在緩存
,則返回狀態碼504 Gateway Timeout
。
服務器
must-revalidate: 會忽略max-stale
指令, 代理服務器會向源服務器
再次驗證 請求的響應緩存目前任然有效
。代理服務器
鏈接源服務器異常,返回504 Gateway Timeout
。執行對象是被請求
的代理服務器
proxy-revalidate: 要求全部
的緩存服務器在接收到客戶端帶有該指令的請求返回響應以前, 必須再次驗證緩存的有效性。例如當用戶登陸,須要全部緩存代理服務器都更新文件,而不是隻有被請求的緩存服務器更新。
no-transform: 不管是請求,仍是響應,緩存都不能更改實體主體的媒體類型(可防止緩存或代理 去壓縮圖片等操做)。
cache-extension token:
經過cache-extension 標記(token),可擴展Cache-Control首部字段內的指令。以下:若是緩存服務器不能理解commutity這個新指令,則直接忽略。所以extension tokens 只對能識別它的緩存服務器有效。
Cache-Control: private, community="UTC"
複製代碼
Connection 首部: 控制再也不轉發給代理
的首部字段 和 管理持久化鏈接。
keep-alive
持久鏈接,當服務器想明確斷開鏈接,使用Connection: close
首部字段Date: 建立HTTP報文的日期和事件。
Pragma: 僅爲兼容歷史版本而存在。Pragma: no-cache
Trailer: 事先說明在報文主體後
記錄了哪些首部字段
。 該首部字段可應用在 HTTP/1.1 版本分塊傳輸編碼時。
Transfer-Encoding: 規定傳輸報文主體
時採用的編碼方式
。僅對分塊傳輸
編碼有效。
Upgrade: 用於檢測HTTP協議及其餘協議是否可以使用更高的版本進行通訊。
Warning: 告知用戶一些與緩存相關的警告問題。
Warning: [警告碼][警告的主機:端口號]「[警告內容]」([日期時間])
Warning: 113 gw.hackr.jo:8080 "something is expiration" Tue 03
複製代碼
q:表示權重,範圍0-1,值越大權重越高。Accept-xxx 均可以使用權重來控制。
首部字段 | 描述 | 詳細參數 |
---|---|---|
Accept | "通知服務器,用戶代理可以處理的媒體類型和媒體類型的相對優先級 | type/subtype 格式" "文本類型:text/html ,text/plain,text/css,application/xhtm+xml,applciation/xml 圖片文件:image/jpeg,image/gif,image/png 視頻文件:video/mpeg,video/quicktime 應用程序使用的二進制文件:application/octet-stream,application/zip |
Accept-Charset | 通知服務器用戶代理支持的字符集及字符集的相對優先順序 | Accept-Charset:iso-8895-5,unicode-1-1; |
Accept-Encoding | 告知服務器用戶代理支持的內容編碼及內容編碼的優先級順序 | gzip: 由文件壓縮程序gzip(GNU zip)生成的編碼格式 compress: 由UNIX文件壓縮程序compress生成的編碼格式 deflate:組合使用 zlib 格式(RFC1950) 及由 deflate 壓縮算法(RFC1951) 生成的編碼格式 identity: 不執行壓縮或不會變化的默認編碼格式 |
Accept-Language | 告知服務器用戶代理可以處理的天然語言集(指中文或英文等),以及天然語言集的相對優先級 | Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3 |
Authorization | 告知服務器, 用戶代理的認證信息(證書值) | GET /index.html Ahtorization: Basic dWVub3NlbjpwYXNzd29yZA== |
Expect | 告知服務器, 指望出現的某種特定行爲 | HTTP/1.1 規範只定義了 100-continue(狀態碼 100 Continue 之意) |
Form | 告知服務器使用用戶代理的用戶的電子郵件地址。目的就是爲了顯示搜索引擎等用戶代理的負責人的電子郵件聯繫方式 | Form: aa@qq.com |
Host | 同一個IP 服務器部署這多個域名, 使用首部字段 Host 加以區分。 | Host: www.hackr.jp |
Max-Forwards | 以十進制整數形式指定可通過服務器最大的數目 。經過TRACE 或OPTION 方法,沒通過一個服務器 值減1 。當值爲 0 時再也不轉發,直接返回響應 |
Max-Forwards:10 |
Proxy-Authorization | 接收從代理服務器發來的認證查詢時, 客戶端會發送包含首部字段Proxy-Authorization 的請求, 以告知服務器認證所須要的信息 |
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5 |
Range | 對於只需獲取部分資源的範圍請求, 包含首部字段 Range 便可告知服務器資源的指定範圍 |
Range: bytes=5001-10000 |
Referer | 首部字段 Referer 會告知服務器請求的原始資源的 URI | |
TE | 告知服務器,客戶端可以處理響應的傳輸編碼方式及相對優先級。 它和首部字段Accept-Encoding很像,可是用於 傳輸編碼 |
TE: gzip,deflate;q=0.5 |
User-Agent | 用於傳達瀏覽器的種類 | User-Agent: Mozilla/5.0 (Window NT 6.1; wow64;rv:13.0)... |
附帶條件請求:形如If-xxx
樣式的請求首部字段成爲條件請求
。服務器接收到附帶條件的請求後,只有判斷指定條件爲真時,纔回執行請求。
首部字段 | 描述 | 詳細參數 |
---|---|---|
If-Match | 只有If-Match的字段值和ETag值匹配,服務器才接受請求 | 客戶端請求: Get /Index.html If-Match:'123456' 服務器: 匹配資源所用的實體標記(ETag)值,一致執行請求返回資源,不然返回狀態碼412 Precondition Failed If-Match:*,服務器會忽略ETag 若是須要獲取到資源,則在返回狀態碼412後,還須要再次發起請求 get /index.html ,才能獲取到新的資源 |
If-Modified-Since | 指定日期時間後,資源費發生了更新,服務端會接收請求。 用來確認代理或客戶端擁有的本地資源的有效性。 |
客戶端請求: Get /Index.html If-Modified-Since:Thu,15 Apr 2012 00:00:00 GMT 服務端: 有修改返回:200 ok Last-Modified: Sun,29 Aug 2012 00:00:12 GMT 無修改返回 304 Not Modified |
If-None-Match | 只有在 If-None-Match 的字段值與 ETag 值不一致時, 可處理該請求。 若是一致,就返回304,表示告知客戶端使用本身本地的緩存。 在 GET 或 HEAD 方法中使用首部字段 If-None-Match 可獲取最新的資源。 所以,這與使用首部字段 If-Modified-Since 時有些相似 |
客戶端請求: Get /Index.html If-None-Match: '123456' 服務端: ETag不一致:服務端處理,返回最新的數據 一致則返回304,客戶端使用本身本地緩存 |
If-Range | 告知服務器若指定的 IfRange 字段值(ETag 值或者時間) 和請求資源的 ETag 值或時間相一致時,則做爲範圍請求處理。反之,則返回全體資源 |
客戶端: GET /index.html If-Range:'123456' Range: byte=5001-10000 服務端 ETag=123456: 206 Partial Content Content-Range: bytes 5001-10000/10000 Content-Length:5000 服務器 ETag=567890: 200 OK ETag: '567890' |
If-Unmodified-Since | 告知服務器,請求的資源在字段值指定的日期以後,未發生更新的請求才處理請求。 若是指定日期後發生了更新,則以狀態碼412 Preconditino Failed 響應 |
客戶端: Get /index.html If-Unmodified-Since:Thu,15 Apr 2012 00:00:00 GMT 服務端時間內無修改: 200 ok 服務端時間內有修改: 412 Precondition Failed |
首部字段 | 描述 | 詳細參數 |
---|---|---|
Accept-Ranges | 告知客戶端,服務器端是否可以處理範圍請求,以指定獲取服務器端某個部分的資源 | Accept-Ranges:bytes/none (none表示不能處理) |
Age | 告訴客戶端,源服務器在多久前建立了響應。單位秒 。若建立該響應的服務器是緩存服務器, Age 值是指緩存後的響應再次發起認證到認證完成的時間值。 代理建立響應時必須加上首部字段Age。 |
Age:600 |
ETag | 它是一種可將資源以字符串 形式作惟一性標識的方式。服務器會爲每份資源分配對應的 ETag 值。當資源更新時,ETag 值也須要更新。生成 ETag 值時,並無 統一的算法規則,而僅僅是由服務器來分配 資源被緩存時,就會被分配惟一性標識。ETag 中有強 ETag 值和弱 ETag 值之分: -強 ETag 值: 不論實體發生多麼細微的變化都會改變其值。 ETag: "usagi-1234" -弱 ETag 值: 只用於提示資源是否相同。只有資源發生了根本改變,產 生差別時纔會改變 ETag 值。這時,會在字段值最開始處附加 W/。 ETag: W/"usagi-1234" |
ETag: "usagi-1234" |
Location | 將響應接收方引導至某個與請求 URI 位置不一樣的資源 通常配合 3xx:Redirection ,提供重定向URI,瀏覽器會強制性嘗試訪問重定向資源 |
Location: www.xxx.com |
proxy-Authenticate | 會把由代理服務器所要求的認證信息發送給客戶端 | Proxy-Authenticate: Basic realm="Usagidesign Auth" |
Retry-After | 告訴客戶端應該多久以後再次發起請求,配合狀態碼503 Service Unavailable 或3xx Redirect |
Retry-After:120(單位秒),Retry-After:Wed 04 Jul 2012 06:32:23 GMT |
Server | 告知客戶端,當前服務器上安裝的HTTP服務器應用程序的信息 | Server: Apache/2.2.6 (Unix) PHP/5.2.5 |
WWW-Authenticate | 用於 HTTP 訪問認證。 它會告知客戶端用於訪問請求 URI 所指定資源的認證方案(Basic 或是 Digest) 和帶參數提示的質詢(challenge) 。 狀態碼 401 Unauthorized 響應中,確定帶有首部字段 WWW-Authenticate | |
Vary | 首部字段Vary可對緩存進行控制,源服務器 向 代理服務器傳達關於本地返還使用方法的命令: -代理服務器收到源服務器Vary:Accept-Language,若要進行緩存,則只緩存Accept-Language中可接受的語言的對應的文件進行緩存(en:則緩存英文)。 若是緩存服務器的緩存資源和Vary指定的首部字段不一樣,則須要從新衝源服務器中獲取 |
Vary: Accept-Language |
首部字段 | 描述 | 詳細參數 |
---|---|---|
Allow | 用於通知客戶端可以支持 Request-URI 指定資源的全部 HTTP 方法 | Allow: GET,HEAD |
Content-Encoding | 告知客戶端服務器對實體的主體部分選用的內容編碼方式 | Content-Encoding: gzip |
Content-Language | 告訴客戶端實體主體使用的天然語言 | Content-Language:zh-CN |
Content-Length | 實體主體部分的大小。對實體主體進行內容編碼傳輸時,不能再使用Content-Length | Content-Length: 1500 |
Content-Location | 給出與報文主體部分相對應的 URI。與首部字段Location 不一樣,表示的是報文主體返回資源對應的URI |
Content-Location:http:www.xx |
Content-MD5 | 客戶端會將接受到的主體實體 執行相同的MD5算法,而後與首部字段Content-MD5 字段值進行比較。這種方式其實沒法判斷內容是否被篡改:由於 主體實體 被篡改,而Content-MD5 也可能被篡改 |
Content-MD5:OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY== |
Content-Range | 針對範圍請求時,經過Content-Range 告訴客戶端返回的實體 的哪部分符合範圍請求 |
Content-Range: bytes 5001-10000/10000 |
Content-Type | 告知客戶端實體主體內對象 的媒體類型。媒體類型和 Accept 同樣,字段使用type-subtype 形式賦值參數 charset :使用iso-8859-1 等字符集進行賦值 |
Content-Type: text/html;charset=UTF-8 |
Expires | 告訴客戶端,該資源的失效日期。 換存服務器接收到該首部,在過時以前一直會以緩存來應答請求。超過該日期,緩存服務器會轉向源服務器獲取請求資源 |
Exipires: Wed, 04 Jul 2012 08:26:05 GMT |
Last-Modified | 指明資源最終修改時間 | Last-Modified: Wed, 23 May 2012 09:59:55 GMT |
HTTP首部字段將定義緩存代理
和非緩存代理
的行爲。
逐跳首部(Hop-by-hop Header)
: 該類首部支隊單次轉發有效,會因經過緩存或代理而再也不轉發。HTTP/1.1後若是要使用Hop-by-hop
首部,需提供Connection首部字段。
端到端首部(End-to-end Header)
: 除上面的逐跳首部
,都屬於該類。分到該類的首部會轉發給請求
/ 響應對應的最終接收目標
,且必須保存
在由緩存生成的響應中
,另外規定它必須被轉發
。
Cookie:請求首部字段
,服務器接收到的Cookie信息,一樣能夠以多個 Cookie 形式發送
set-Cookie: 開始狀態管理所使用的Cookie信息,響應首部字段
Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31
複製代碼
Set-Cookie屬性 | 描述 |
---|---|
expires | 指定瀏覽器可發送Cookie的有效日期 當expires省略,有效期僅限於維持瀏覽器會話(Session)時間段內,一般用於瀏覽器關閉以前 |
path | path 屬性可用於限制指定 Cookie 的發送範圍的文件目錄 不過另有辦法可避開這項限制, 看來對其做爲安全機制的效果不能抱有期待 |
domain | 指定的域名可作到與結尾匹配一致。 例如當指定example.com後,除了該域名,www.example.com 或www2.expample.com等均可以發送cookie |
secure | 限制 Web 頁面僅在 HTTPS 安全鏈接時, 才能夠發送 Cookie。當無該屬性 ,不管是http,仍是https均可以回收該行爲例如: Set-Cookie: name=value; secure ,僅當在https://www.example.com/(HTTPS ) 安全鏈接的狀況下才會進行 Cookie 的回收 |
HttpOnly | 它使 JavaScript 腳本沒法得到 Cookie。 其主要目的爲防止跨站腳本攻擊(Cross-sitescripting, XSS) 對 Cookie 的信息竊取 例如: Set-Cookie: name=zhaoxxx; HttpOnly ,在Web頁面能夠對Cookie進行讀取操做,可是使用javascript的document.cookie 就沒法讀取。所以也就沒法在 XSS 中利用 JavaScript 劫持Cookie 了 |
Content-Disposition: 指示服務器回覆的內容該以何種形式展現,是之內聯的形式(即網頁或者頁面的一部分),仍是以附件的形式下載並保存到本地。
首部字段 | 描述 |
---|---|
X-Frame-Options(響應首部 ) |
用於控制網站內容在其餘 Web 網站的 Frame 標籤內的顯示問題。其主要目的是爲了防止點擊劫持(clickjacking) 攻擊。 DENY: 拒絕,SAMEORIGIN:僅同源域名下的頁面容許顯示加載,其餘域名則不行 |
X-XSS-Protection(響應首部 ) |
是針對跨站腳本攻擊(XSS) 的一種對策, 用於控制瀏覽器 XSS 防禦機制的開關 0:將XSS過來設置爲無效狀態,1:將XSS過濾設置成有效狀態 |
DNT(請求首部 ) |
其中DNT(Do Not Track),拒絕我的信息被收集,表示拒絕被精準廣告追蹤的一種方法 0: 贊成被追蹤,1:拒絕被追蹤 |
P3P(響應首部 ) |
P3P(The Platform forPrivacy Preferences, 在線隱私偏好平臺) 技術,可讓 Web 網站上的我的隱私變成一種僅供程序可理解的形式, 以達到保護用戶隱私的目的。P3P設定步驟: 1:建立P3P隱私2: 建立P3P隱私對照文件後,保存命名在/w3c/p3p.xml3:從P3P隱私中新建Compact plicies後,輸出到HTTP響應中 |