結論
- 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 欄位 }}