欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

URL 长度有限制吗?

程序员文章站 2022-10-02 14:46:02
原因是传说中get方法是通过url来传递,而url的长度是受限的,而post方法采用流的方式,理论上可以传递的容量是没有限制的。现在来看这个描述:“url的长度是受限的”,...
原因是传说中get方法是通过url来传递,而url的长度是受限的,而post方法采用流的方式,理论上可以传递的容量是没有限制的。
现在来看这个描述:“url的长度是受限的”,具体是在哪里受限制呢?browser端还是server端呢?网上现在google出来的结果都是说url的长度实际上是受到browser的限制,如ie限定url长度为2083字节,opera 是4050, netscape 是8192,等等。据说http协议本身对get方法的长度没有限制。那么,如果不使用浏览器,而是从程序里发送httprequest的话,get发送的长度就可以是无限的么?抱着这样的想法,进行了如下实验:

在client端,用java实现,向server端发送httprequest,使用get方法。

在server端,设计一个apache module,并将strlen(r->args),用ap_rprintf输出,作为response,返回到java端。

通过不断增加get方法传过去的字符串的长度,发现url长度超过8208字节时,java抛出io exception: server returned http response code: 414 for url: .....

414 代表哪种错误呢?

414 - request-url too long (see: http://www.websitepulse.com/kb/4xx_http_status_codes.html)

由此可见,server端对于url的长度是有限制的,那么对于get方法可以传输的数据也是有限制的。只是这个限制可能根据服务器的处理能力而定,或者在哪里哪里配置,就不是很清楚了。(俺又开始瞎猜,这貌似不是什么好习惯的说)。

下面开始瞎掰:

其实这是可以理解的,url长度不可能没有限制的,http协议毕竟是udp的,而一个udp包毕竟是有大小限制的。那么post为什么就能传递大批量数据呢?在apache module里面尝试了读取post数据之前,还真没有什么深刻的理解。只不过用一个“流”字打法之而已。实际上,post数据解析的时候是分块来读取的,如果从udp的角度来理解的话,就可是分成好多个udp包传过来,一个一个读出来就好了。