HTTP的各類首部(Header)

共四種首部

  • 通用首部
  • 請求首部
  • 響應首部
  • 實體首部
  • 非HTTP/1.1首部

非HTTP/1.1首部

Set-Cookie
  • name=value
  • expires=日期時間。若是不指定,則默認爲瀏覽器關閉爲止。一旦發送到客戶端就脫離了服務器的控制,服務端沒法刪除,只能覆蓋。
  • path=PATH 緩存的做用對象
  • domain=域名 緩存做用的域名,不指定則爲建立Cookie的服務器
  • Secure 只在https中才發送Cookie
  • HttpOnly Cookie不能被js訪問,防止XSS攻擊。
  • status=enable/disable
Cookie

Cookie: k=v;k2=v3html

Content-Disposition

Content-Disposition 是 MIME 協議的擴展,MIME 協議指示 MIME 用戶代理如何顯示附加的文件。
Content-Disposition: attachment 以附件形式下載。算法

X-Frame-Options

屬於響應首部
控制內容在其餘Web網站的Frame標籤的顯示問題。瀏覽器

  • DENY 拒絕,不容許其餘站點Frame中引用
  • SAMEORIGIN 同源策略

不指定的話,能夠隨便引用。緩存

X-XSS-Proterction

屬於響應首部服務器

  • 0 不保護
  • 1 保護
DNT

屬於請求首部,"Do Not Track"的縮寫網絡

  • 0 能夠被追蹤
  • 1 拒絕被追蹤
P3P

響應首部,「The Platform for Privacy Preferences」 隱私偏好平臺dom

根據是不是定義緩存代理的行爲,分爲兩種、

  • 端到端首部 End-to-end Header: 這類首部在轉發時必須帶着。
  • 逐跳首部 Hop-by-hop Header:這類首部只對單次轉發有效,會因爲代理存在而再也不轉發。

逐跳首部:ide

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Proxy-Authorization
  • Trailer
  • TE
  • Transfer-Encoding
  • Upgrade

==注意下文中的[]內的Q和R,分別表示指令可用於請求中或響應中。==網站

通用首部

Cache-Control

控制緩存服務器!編碼

  • public [R]公有緩存
  • private [R]私有緩存,特定用戶的緩存
  • no-cache [QR]強制再次向源服務器驗證
  • no-store [QR]不緩存
  • max-age [QR]緩存時間,單位秒
  • s-max-age [R]緩存時間,單位秒
  • max-stale [Q]過時時間只要不超過max-stale就能夠接受。
  • min-fresh [Q]只在請求中。若是緩存還有不到min-fresh的有效期,我就不要了,給我最新的,即當前時間+min-fresh > 過時時間,則給我新的。
  • only-if-cached [Q]只返回緩存,若是沒有返回504 Gateway Timeout
  • must-revalidate [R]必須再次驗證,若是沒法連用源服務器,返回504。此指令會忽略max-stale。
  • proxy-revalidate [R]客戶端要求代理服務器必須再次驗證。
  • no-transform [QR]不容許緩存服務器改變媒體類型,好比壓縮圖片等。
  • cache-extension [QR]擴展指令。
Connection
控制再也不轉發的首部

Upgrade: HTTP/1.1
Connection: Upgrade
表示轉發時去掉Upgrade首部!

管理持久鏈接

Connection: Keep-Alive
關閉鏈接 Connection: Close

Date

此http報文的建立日期

Pragma

雖然屬於通用首部,但只做用在發送請求時。

客戶端要求不接受緩存,須要怎麼設置?
若是中間服務器的版本都是HTTP/1.1,只使用Cache-Control: no-cache便可。瞭解全部中間服務器的版本不太現實,因此最好加上
Pragma: no-cache。

Trailer 拖掛

用於分塊傳輸編碼中,在報文主體後能夠拖掛首部。爲何要將首部放在主體後面呢?

  • 拖掛的內容是可選的元數據,客戶端不必定須要理解和使用(客戶端能夠忽略並丟棄拖掛中的內容)。
  • trailer首部是在最初的分塊編碼被加入到 HTTP/1.1 規範的草案以後才加入的,所以有些應用程序可能不理解這個首部
  • 拖掛中能夠包含附帶的首部字段,它們的值在報文開始的時候多是沒法肯定的(例如,必需要先生成主體的內容)。Content-MD5 首部就是一個能夠在拖掛中發送的首部,由於在文檔生成以前,很難算出它的 MD5。
  • 除了 Transfer-Encoding、Trailer 以及 Content-Length 首部以外,其餘 HTTP 首部均可以做爲拖掛發送。
Transfer-Encoding: chunked
Trailer: Expires
(主體)
0
Expires: <日期時間>
Transfer-Encoding: chunked
Trailer: Content-MD5
(主體)
0
Content-MD5: xxxxx
Transfer-Encoding: chunked

只用於分塊傳輸編碼中!

Upgrade

屬於逐跳首部,用於指定一個徹底不一樣的通訊協議,好比TLS/1.0、WebSocket等
服務器會返回101 Switching Protocols

Via

用於追蹤傳輸路徑,每通過一個代理,會追加代理服務器信息。
還能夠避免請求迴環的發生,因此在通過代理時必須附加此首部。
通常和Trace方法和Max-Forwards首部一塊兒使用。

Warning

告知用戶一些與緩存相關的警告信息。

請求首部

Accept

客戶端可接受的文件格式及其優先級

Accpet: text/html, text/plain; q=0.3
表示最好返回html格式的,若是沒有的話返回text格式的也行。
能夠指定權重,不指定的話默認是1.0

Accept-Charset

字符集及其優先級

iso-8859-5, unicode-1-1; q=0.8

Accept-Encoding

內容編碼方式及其優先級,主要指壓縮格式

Accept-Encoding: gzip

  • gzip
  • compress
  • deflate
  • identity 不壓縮
Accept-Language

可接受的語言

Authorization

客戶端的認證信息

Expect
From

用戶的聯繫方式

Host

在http/1.1中惟一一個必須包含在請求中的首部
用途:當服務器部署了多個域名的Web應用時,因爲到達時域名已經換成了IP,因此須要Host首部提供域名,用於區分不一樣的虛擬服務器。

If-Match

If-Match: "1234"
須要配合ETag使用:html文件會標記ETAG:1234。
若是匹配上了則正常返回,若是沒有沒有匹配上則返回:412 Precondition Failed 前提條件失敗。

下面4個都是條件請求的首部

If-None-Match
If-Modified-Since
If-Unmodified-Since
If-Range

若是匹配上則執行範圍請求,不然返回所有頁面。

配合Range使用 Range: bytes=5001-10000

Max-Forwards

與Trace方法一塊兒使用,控制通過的服務器的最大數目。

Referer

請求的原始URI

TE

兩個做用:

  1. 客戶端可以處理的編碼方式及其優先級(壓縮)

TE: gzip. deflate;q=0.5

  1. 配合實現分塊傳輸編碼

TE: trailers, chunked

User-Agent

客戶端信息

響應首部

Accept-Ranges
  • bytes 支持範圍請求
  • none 不支持範圍請求
Age

主要用於緩存代理服務器,代理服務器必須返回此首部
用於指示緩存是多久以前確認過的,單位秒

ETag

實體的標識
Etag有強弱之分
強Etag值:微小的變化也會改變其值
弱Etag值:只有發生根本性變化纔會改變,這時會以在開頭附加 W/

Location

配合重定向狀態,將頁面引導到新的頁面。

Proxy-Authenticate

代理認證

WWW-Authenticate

服務器認證

Retry-After

提示多久以後再重試請求,配合503服務不可用使用。

Server

服務器信息

Vary

提示緩存服務器,當什麼首部相同時才返回緩存,若是不一樣,即便是請求的資源命中緩存也不使用!
Vary: Accept-Language 接收語言相同時才返回緩存。

實體首部

Allow

用於響應時,表達服務器容許的HTTP方法
若是不匹配,返回405 Method Not Allowed

Content-Encoding

代表對方我已經按照這種編碼方式進行了壓縮。

Content-Language

告知客戶端內容的語言

Content-Length

代表實體的主體部分的大小,單位是字節。
若是使用了內容編碼傳輸(Content-Encoding)時,不能再使用此首部,由於已經進行了壓縮。

Content-Location

主體內容的URI

Content-MD5

客戶端會對接收的主體執行相同的MD5算法,Base64,比較值是否相等。
HTTP首部不接受二進制值!
此機制是沒法防止惡意篡改的,只能防止網絡意外出錯的驗證。

Content-Range

Content-Range: bytes 5001-10000/10000

Content-Type

媒體類型
Content-Type: text/html; charset=UTF-8

Expires

服務器告訴緩存服務器,能夠此資源緩存的截止時間
當無須要緩存時,將此值與Date首部的值設置成同樣的。

緩存有效期的優先級:

  • http1.0版本: s-maxage > Expires > max-age
  • http1.1版本: s-maxage > max-age > Expires
相關文章
相關標籤/搜索