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

SamChi發表於2012-12-19

  剛才無事網上瞎逛的時候看到有同學總結自己最近去面試時被問到的面試題,看到有人被問到URL的最大長度、Cookie的最大長度之類的問題,如果平時不是很注意http細節的話這些問題還真是不好回答,另外除了面試,知道這些長度限制,有時候開發時碰到問題心裡也能有個數,想到自己對這些問題也不是特別熟悉,於是就在這裡總結下——Http協議當中的各種長度限制。

  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 : 2083

  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 協議詳解

相關文章