天天看點

http頭詳解

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代表區域是美國

http頭詳解