http请求的url或body或header有长度或大小的限制吗?
首先:http协议对url长度是没有限制的。HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIs,这种无效长度的URL可能会在客户端以基于GET方式的请求时产生。如果服务器不能处理太长的URI的时候,服务器应该返回414状态码(此状态码代表Request-URI太长)。
那么就是浏览器和服务器会对请求进行限制。
1、GET请求
URL长度的限制
1.1 浏览器
浏览器              最大长度(字符数)              备注
Internet Explorer      2083                             如果超过这个数字,提交按钮没有任何反应
Firefox                65,536     
chrome                8182     
Safari                 80,000     
Opera                  190,000     
curl(linux下指令)    8167     
1.2 服务器
接触最多的是tomcat和nginx了,也都是控制请求header。
1.1.1 nginx
client_header_buffer_size 512k; //该参数对nginx服务器接受客户端请求的头信息时所分配的最大缓冲区的大小做了限制,也就是nginx服务器一次接受一个客户端请求可就收的最大都信息大小。这个头不仅包含 request-line,还包括通用信息头、请求头域、响应头域的长度总和。这也相当程度的限制了url的长度。nginx服务器默认的限制是4K或者8K,这是根据服务器的硬件配置有关的,一般为内存一页的大小,目前大部分为4K,即4096字节。
large_client_header_buffers 7 512k; //该参数对发自客户端的http头信息的大小进行了限制,这个值和large_client_header_buffers同时限制了http请求头的大小,超过其中一个值则服务器会返回错误状态码 414(Request-URI Too Large)。该参数的默认值为1K
1.1.2 tomcat
LimitRequestLine //从定义来看,这个选项限制的并不是url的长度,也不是head头的长度,而是是http请求中 request-line的长度(相关定义:http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1)。即:Request-Line = Method SP Request-URI SP HTTP-Version CRLF 的长度。但这很大程度上也就限制的GET、HEAD请求的参数长度,因为GET和HEAD请求是不会向服务器发送消息实体(message-body)的。可以说这个限制就是限制了url的长度不能超过该设定的值,如果超过了,服务器会返回错误状态码 414(Request-URI Too Large)。

maxHttpHeaderSize="3145728" --可以设置这个控制请求url长度

2、POST请求
请求体大小的限制
服务器:
2.1 nginx服务器
在nginx的配置文件中进行配置,限制请求报文体的大小,nginx默认大小是1M,相当于是限制了post方式提交内容的最大限制。
client_max_body_size   20m; //可以在http、server、location中加入此配置。
2.2 tomcat服务器
LimitRequestBody //这个参数限制了http请求可以被接受的最大消息大小,默认是无限大的,但是其实这个无限也是有限的,最大不能超过2G。
注:tomcat中的配置都在server.xml配置文件中,你监听的端口那里。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐