结论
- 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 字段 }}