結論
- HTTP 協議未規定GET和POST的長度
- GET的最大長度是因為瀏覽器和WEB服務器顯示了URI的長度
- 不同瀏覽器和WEB服務器,限制的最大長度不同
- 若要支持IE,則最大長度為2083 byte,若只支持chrom,最大長度是8182 byte
誤解
大家都知道http中存在GET和POST兩種最常用的請求方式。
1 http協議並沒有對get請求的協議進行限制。對get請求參數長度限制的是客戶端(瀏覽器),服務端,代理服務器(nginx)。 2 3 常見的瀏覽器對get請求url長度的限制如下: 4 1、IE 5 IE瀏覽器(Microsoft Internet Explorer) 對url長度限制是2083(2K+53),超過這個限制,則自動截斷(若是form提交則提交按鈕不起作用)。 6 7 2、firefox 8 firefox(火狐瀏覽器)的url長度限制為 65 536字符,但實際上有效的URL最大長度不少於100,000個字符。 9 10 3、chrome 11 chrome(谷歌)的url長度限制超過8182個字符返回本文開頭時列出的錯誤。 12 13 4、Safari 14 Safari的url長度限制至少為 80 000 字符。 15 16 5、Opera 17 Opera 瀏覽器的url長度限制為190 000 字符。Opera 9 地址欄中輸入190 000字符時依然能正常編輯。 18 19 20 21 代理服務器對get請求的限制如下: 22 當請求頭過大時,超過large_client_header_buffer時,nginx可能返回"Request URI too large" (414)或者"Bad-request"(400)錯誤。 這次需要設置配置文件中 large_client_header_buffer 23 24 當Request line的長度大於large_client_header_buffer的一個buffer(128k)時,nginx會返回"Request URI too large" (414)錯誤(url長度太長)。這時需要設置配置文件中 25 26 client_header_buffer_size 27 28 Django服務端設置gunicore控制服務對get請求的長度限制 29 在gunicore中配置 30 31 {{limit_request_field_size 字段 }}
