HTTP协议规范从未有对URL长度进行任何限制,也没有对GET/POST的参数值数据长度有限制。这个限制是特定的浏览器及服务器对它的限制。
常见浏览器对URL的最大限制:
- Microsoft Internet Explorer (Browser)
IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
2. Firefox (Browser)
对于Firefox浏览器URL的长度限制为65,536个字符。
3. Safari (Browser)
最大长度限制为 80,000个字符。
4. Google (chrome)
最大长度限制为8182个字符。
5. Apache (Server)
能接受最大url长度为8,192个字符。
因此,为了让所有的用户都能正常浏览, URL最好不要超过IE的最大长度限制(2083个字符),当然,如果URL不直接提供给用户,而是提供给程序调用,这时的长度就只受Web服务器影响了。
注:对于中文的传递,最终由urlencode后的编码形式进行传递,如果浏览器的编码为UTF8的话,一个汉字最终编码后的字符长度为9个字符。因此如果使用的 GET 方法,最大长度=URL最大长度—实际路径中的字符数。
GET VS POST
1、多数浏览器对于POST采用两阶段发送数据的,第一步发送请求头header,第二步再发送请求体body部分,即使参数再少再短,也会被分成两个步骤来发送(相对于GET)。
2. HTTP请求包括请求报头和请求主体两个部分,其中请求报头包含了至关重要的信息,包括:
- 请求的方法(GET / POST/PUT...)、
- 目标url、
- 遵循的协议(http / https / ftp…),
- 返回的信息是否需要缓存,
- 客户端是否发送cookie等。
3. POST请求
3.1 nginx服务器
请求体Body大小的限制,在Nginx服务器的配置文件nginx.conf中http{}可进行配置,nginx默认大小是1M。
client_max_body_size 100M; //限制请求报文体的大小
client_header_buffer_size 512K; //nginx服务器接受客户端请求的头信息时所分配的最大缓冲区
large_client_header_buffers 512K; //该参数对发自客户端的http头信息的大小进行了限制,超过限制服务器会返回错误状态码 414(Request-URI Too Large)。该参数的默认值为1K