HTTP協議中的各種長度限制

2021-06-29 03:34:31 字數 2579 閱讀 6561

request(http請求訊息)

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

get /index.html http/1.1 //請求頭,下面都是訊息頭.

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

在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的長度限制範圍之內,請求的引數個數沒有限制。

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

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請求頭中傳遞給伺服器,因此還會受到伺服器請求頭長度的影響。

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

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

firefox\chrome\opera都是允許每個域的最大長度為5mb

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

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

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

http 請求 post get 長度限制

一 問題起因 在某專案釋放後bug統計的附件 釋放後問題 裡有 問題 原因 分析 備註 csv處理時,如果處理的主題數過多,發生url引數上限的錯誤 可變長度的引數通過url方式傳遞,會造成這種潛在的錯誤發生。1 屬於2次發生問題,開發方面沒有及時通過checklist等方式向組員傳達相關注意事項 ...

http各種中的各種timeout

1.tomcat 可以通過telnet測試 在tomcat的server.xml中,有個配置節 uriencoding utf 8 其中的connectiontimeout代表的意思是 在已經建立的http連線上,如果5000毫秒沒有資訊傳輸,怎伺服器關閉連線。但如果tomcat伺服器內容消耗的時間...