1. 程式人生 > >Http ---- 協議中的各種長度限制總結

Http ---- 協議中的各種長度限制總結

HTTP1.0的格式


request(HTTP請求訊息)
結構:一個請求行.部分訊息頭,以及實體內容,其中的一些訊息內容都是可選擇的.訊息頭和實體內容之間要用空行分開.

GET /index.html HTTP/1.1 //請求頭,下面都是訊息頭.
Accept: */*
Accept-Languang:en-us
Connection:keep-alive
Host:localhost
Referer:HTTP://localhost/index.html
User-Agent:Mozilla/4.0
Accept-Encoding:gzip,deflate//到上面都是訊息頭,下面一個空行表示完了,接下來是實體內容.

Response響應訊息頭

在接收並解析請求訊息後,伺服器以 HTTP 響應訊息響應。相當伺服器對客戶的http的迴應
結構:一個狀態行.部分訊息

頭,以及實體內容,其中的一些訊息內容都是可選擇的.訊息頭和實體內容之間要用空行分開.

HTTP/1.1 200ok           //狀態行.下面為訊息頭
Server:Apache2.2
Date:Thu, 13 Jul 2008 16:29:46 GMT
Content-Length:2222
Content-Type:text/html
Cache_control:private //和請求訊息頭一樣下面有一個空行

注意:使用get的方法的請求訊息中是不能包含實體內容的,只有使用post,put和delete的方法請求訊息中才能有實體內容.對 HTTP1.1來講,如果HTTP中有實體內容,但沒有使用權chunked傳輸編碼.那麼訊息頭部分必須包含內容長度欄位.不然不知什麼時候內容才結 束。HTTP1.1中一定要有host欄位

以上訊息頭的結構:每個訊息頭都包含一個頭欄位名稱,然後依次是冒號,空格值,回車和換行符,欄位不區分大小寫.對訊息頭中的訊息頭可以任何順序排列.
訊息頭可以分為資訊頭,請求頭,響應頭,實體頭四類
如果有多個選項,可以用逗號分隔Accept-Encoding:gzip ,deflate


1. URL長度限制
在Http1.1協議中並沒有提出針對URL的長度進行限制,RFC協議裡面是這樣描述的,HTTP協議並不對URI的長度做任何的限制,伺服器端必須能夠處理任何它們所提供服務多能接受的URI,並且能夠處理無限長度的URI,如果伺服器不能處理過長的URI,那麼應該返回414狀態碼。
 
 
雖然Http協議規定了,但是Web伺服器和瀏覽器對URI都有自己的長度限制。

伺服器的限制:我接觸的最多的伺服器型別就是Nginx和Tomcat,對於url的長度限制,它們都是通過控制http請求頭的長度來進行限制的,nginx的配置引數為large_client_header_buffers,tomcat的請求配置引數為maxHttpHeaderSize,都是可以自己去進行設定。

瀏覽器的限制:每種瀏覽器也會對url的長度有所限制,下面是幾種常見瀏覽器的url長度限制:(單位:字元)
IE : 2803
Firefox:65536
Chrome:8182
Safari:80000
Opera:190000

對於get請求,在url的長度限制範圍之內,請求的引數個數沒有限制。

2. Post資料的長度限制
Post資料的長度限制與url長度限制類似,也是在Http協議中沒有規定長度限制,長度限制可以在伺服器端配置最大http請求頭長度的方式來實現。

3. Cookie的長度限制
Cookie的長度限制分這麼幾個方面來總結。

(1) 瀏覽器所允許的每個域下的最大cookie數目,沒有去自己測試,從網上找到的資料大概是這麼個情況
IE :原先為20個,後來升級為50個
Firefox: 50個
Opera:30個
Chrome:180個
Safari:無限制

當Cookie數超過限制數時瀏覽器的行為:IE和Opera會採用LRU演算法將老的不常使用的Cookie清除掉,Firefox的行為是隨機踢出某些Cookie的值。當然無論怎樣的策略,還是儘量不要讓Cookie數目超過瀏覽器所允許的範圍。

(2) 瀏覽器所允許的每個Cookie的最大長度

Firefox和Safari:4079位元組
Opera:4096位元組
IE:4095位元組

(3) 伺服器中Http請求頭長度的限制。Cookie會被附在每次http請求頭中傳遞給伺服器,因此還會受到伺服器請求頭長度的影響。

4. Html5 LocalStorage
Html5提供了本地儲存機制來供Web應用在客戶端儲存資料,儘管這個並不屬於Http協議的一部分,但是隨著Html5的流行,我們可能需要越來越多使用LocalStorage,甚至當它普及的時候跟它打交道就會同今天我們跟Cookie打交道一樣多。

對於LocalStorage的長度限制,同Cookie的限制類似,也是瀏覽器針對域來限制,只不過cookie限制的是個數,LocalStorage限制的是長度:

Firefox\Chrome\Opera都是允許每個域的最大長度為5MB

但是這次IE比較大方,允許的最大長度是10MB

原文地址:http://my.oschina.net/chihz/blog/58057(點選開啟連結