当前位置: 首页 > 图文教程 > 网络编程 > 相关技巧 > URL 长度有限制吗?

相关技巧
网站程序员如何应对web标准
一个批量编码转换及ASP/JS加解密/简繁转换的工具
php和js编程中的延迟执行效果的代码
文本文件编码方式区别
风中叶老师讲述的学习方法(学习编程的朋友需要看)
UTF8编码开发中页面空白问题的解决方法
POST与GET方法的区别简要分析
在PB中如何让用户只能修改新增的数据
即时通讯软件在网页上启动临时对话的链接代码
php和asp利用Shell.Application来执行程序的代码
用户权限管理设计[图文说明]
大型网站架构演变和知识体系
在地址栏里显示logo的实现方法
phpMyAdmin“无法载入 mysql 扩展, 请检查 PHP 配置”问题的解决方案
程序开发中的几个请不要相信
Web通信 分析工具 [推荐]
水晶报表 分页 的问题
页面制作统一的头尾的方法(asp+js)
xmlHttp ie6下不跨域还提示没有权限,ie8下不会有这错误
Eclipse 格式化代码时不换行与自动换行的实现方法

相关技巧 中的 URL 长度有限制吗?


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 397 ::
收藏到网摘: n/a

众所周知, 传递小量参数(在没有其他原因,例如隐藏参数值的情况下)推荐使用GET方法,传递大量参数推荐使用POST方法。原因是什么呢? 原因是传说中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包传过来,一个一个读出来就好了。