HTTP Header 包含了一系列重要的資訊
例如狀态碼,響應類型,檔案編碼等...
按字母順序排列
第一個HTTP Header 就是Accept
Accept 隻出現在Request中
其含義是: 浏覽器端可以接受的媒體類型
例如 Accept: text/html 代表浏覽器可以接受伺服器回發的類型為 text/html 也就是我們常說的html文檔
如果伺服器無法傳回text/html類型的資料,伺服器應該傳回一個406錯誤(non acceptable)
通配符 * 代表任意類型
例如 Accept: */* 代表浏覽器可以處理所有類型,(一般浏覽器發給伺服器都是發這個)
又例如 Accept: text/* 代表所有的text的子類都是可以被接受的
Accept可以支援用,分隔的多個類型
例如 Accept: audio/*; q=0.2, audio/basic 的大意是, 浏覽器比較喜歡audio/basic的媒體類型, 不過如果沒有這個類型的話 其他的audio類型也可以
在這裡出現了一個q=0.2 , 這是一個代表關聯程度的值,預設值是一,按照從大到小排列
例如 Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
可接受的類型優先級如下
1) text/html text/x-c
2)text/x-dvi
3)text/plain
q是一個0-1之間的數值, q的預設值是1, q=0代表不可接受(non acceptable)
原文位址(英文): http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
第二個HTTP Header 就是Accept-Charset
Accept-Charset 代表了浏覽器支援的字元集
例如: Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
代表這個浏覽器比較喜歡以下的字元集
1) 最喜歡 ISO-8859-1
2) 然後是 utf-8
3) 最後是 * (所有字元串,不限制)
對應的response http header 字段是 Content-Type
如果浏覽器請求的字元集是伺服器無法響應的, 那麼伺服器應該傳回406錯誤
請注意這個隻是一個辨別位,伺服器還要在程式上保證聲明的字元集類型 和HTTP 正文中所使用的字元集必須是一緻的
例如在HTTP header中聲明 Accept-Charset: utf-8
可是正文用的是GB2312編碼.....浏覽器就亂碼了 - -#
第三個HTTP Header 就是Accept-Encoding
Accept-Encoding 是浏覽器發給伺服器,聲明浏覽器支援的編碼類型的
常見的有
Accept-Encoding: compress, gzip //支援compress 和gzip類型
Accept-Encoding: //預設是identity
Accept-Encoding: * //支援所有類型
Accept-Encoding: compress;q=0.5, gzip;q=1.0 //按順序支援 gzip , compress
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0 // 按順序支援 gzip , identity
伺服器傳回的對應的類型編碼header是 content-encoding
伺服器處理accept-encoding的規則如下所示
1. 如果伺服器可以傳回定義在Accept-Encoding 中的任何一種Encoding類型, 那麼處理成功(除非q的值等于0, 等于0代表不可接受)
2. * 代表任意一種Encoding類型 (除了在Accept-Encoding中顯示定義的類型)
3.如果有多個Encoding同時比對, 按照q值順序排列
4. identity總是可被接受的encoding類型(除非顯示的标記這個類型q=0) , 如果Accept-Encoding的值是空 那麼隻有identity是會被接受的類型
如果Accept-Encoding中的所有類型伺服器都沒發傳回, 那麼應該傳回406錯誤給用戶端
如果request中沒有Accept-Encoding 那麼伺服器會假設所有的Encoding都是可以被接受的,
如果Accept-Encoding中有identity 那麼應該優先傳回identity (除非有q值的定義,或者你認為另外一種類型是更有意義的)
注意:
如果伺服器不支援identity 并且浏覽器沒有發送Accept-Encoding,那麼伺服器應該傾向于使用HTTP1.0中的 "gzip" and "compress" , 伺服器可能按照用戶端類型 發送更适合的encoding類型
大部分HTTP1.0的用戶端無法處理q值
注意:這裡的q其實表示的是優先級。
第四個HTTP Header 就是Accept-Language
Accept-Language 表示浏覽器支援的語言和區域
同樣的 他也支援多個選項,并且支援q值
例如 Accept-Language: en-US,en;q=0.8
首選en-US, 然後是en
注: en-US 是标準的美國英文表示方式, en代表語言是英文 US代表區域是美國
