论HTTP请求大小

网友投稿 1871 2022-09-28

论HTTP请求大小

论HTTP请求大小

论HTTP请求大小

HTTP分为URI,HEADER,Body三个部分。每个部分都可以包含请求信息,那么每个部分是否都有请求大小限制呢?刚开始以为这个问题很容易找到答案,后来发现这也是个挺复杂的问题。

URI

首先是URI,我们知道,在GET请求中,请求参数是放在URL进行传递的,所以,HTTP GET的请求最关心的一个问题:能有多长?我能放多少参数?URI

从HTTP 1.1协议中开始找:(RFC 2616)

The HTTP protocol does not place any a priori limit on the length of a URI

所以明确一点的是HTTP协议是没有显式限制URI的长度的。理论上来说你在URI中传递多少参数都是可以的。

但是现实往往无法永远照进阳光:

1 浏览器限制

所有主流浏览器都会对URI的长度进行限制。如果你在浏览器中输入过长的URI,那么浏览器会自动进行截断。各个浏览器对URI长度的限制各不相同,甚至不同版本也不一样。大约一个概念,2000字符以内的URI都能符合所有主流浏览器的要求。

2 服务端限制

即使客户端同意发送无限长度的URI,但是服务器一方一般都是有长度限制的。一般服务是没有专门针对URI的参数限制的,但是由于URI是会包含在request header中的,所以对header的大小限制是会对URI起作用的,比如nginx的(large_client_header_buffers)这个属性,它默认是4k。

题外话

这里的“URI是包含在request header中的” 这句话其实是有问题的。URI在HTTP协议中是叫做request-Line的,如果具体看协议,是会发现request-Line和request-header是两个不一样的,就是说request的请求其实该分为request-line, request-header, request-body三个部分的(具体可以看第4和5章)。但是好像使用的时候都默认将header中理解为包含了request-line(比如这篇文章​​浏览器限制

各个主流浏览器限制几十k~几百M不等的限制。基本上能满足平时的需求了。但是如果这个长度对你业务有很大影响的话,建议还是亲自测试下。

2 服务端限制

比如nginx的large_client_header_buffers就限制了header的长度。你也可以自己设置。

可能会影响header的参数还有:

client_header_buffer_size

client_header_timeout

各参数可以参考:nginx有一些设置会对body大小产生影响

client_max_body_size,这个参数可以限制body的大小,默认是1m

client_body_timeout,当body太大,或者网络太差的时候,这个也有可能会影响请求的成功率的。

2 php.ini也有一些设置会对上传的body数据产生影响

upload_max_filesize,限制最大上传文件大小

post_max_size ,限制post的大小

memory_limit,限制内存使用大小

max_execution_time,这个是php最大执行时间,也有可能影响请求成功率的。

HTTP请求大小有什么影响

首先是安全因素考虑。

试想一下一个网站的服务器是不限制body大小的,那么它就是可以被***利用***的地方了。***利用这一点往HTTP POST的body中传递非常大(比如几M)的请求。那么比如像nginx+php-fpm这样的,就会占用了服务器一个php进程专门处理这个请求,就会导致你对外无法提供其他的服务了,你的服务就瘫痪了,这就是DDOS***。

其次是文件上传服务考虑。

文件上传有两种情况:

你可能经常遇到为什么文件上传失败?那么大多是上文说的几个设置没有设置对。

其次,文件上传大小是不是设置越大越好?答案必须是否定的,理由也是安全考虑。满足需求的大小限制就够了。

这里就可以理解为什么大都把文件上传和业务接口分开来提供了吧。如果你的文件上传服务和业务接口是同一个机器的话,那么就说明你的业务接口可以允许的body大小一定是很大的。换句话说,在这种情境下,你的业务中的所有POST请求都是不安全的!!只要进行DDOS***,业务就会瘫痪。

参考文章

​​http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers​​

​​http://boutell.com/newfaq/misc/urllength.html​​

​​http://stackoverflow.com/questions/3326210/can-http-headers-be-too-big-for-browsers​​

​​http://admirestator.diandian.com/post/2012-04-28/19237704​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:tnginx调用lua模块编译安装
下一篇:Docker Network Configuration 高级网络配置
相关文章

 发表评论

暂时没有评论,来抢沙发吧~