原因是传说中GET方法是通过URL来传递而URL的长度是受限的而POST方法采用流的方式理论上可以传递的容量是没有限制的 现在来看这个描述“URL的长度是受限的”具体是在哪里受限制呢?browser端还是server端呢?网上现在google出来的结果都是说url的长度实际上是受到browser的限制如IE限定url长度为字节opera 是 Netscape 是等等据说HTTP协议本身对GET方法的长度没有限制那么如果不使用浏览器而是从程序里发送HttpRequest的话GET发送的长度就可以是无限的么?抱着这样的想法进行了如下实验 在client端用Java实现向server端发送HttpRequest使用GET方法 在server端设计一个apache module并将strlen(r>args)用ap_rprintf输出作为response返回到Java端 通过不断增加GET方法传过去的字符串的长度发现URL长度超过字节时Java抛出IO Exception: Server returned HTTP response code: for URL: 代表哪种错误呢? RequestURL Too Long (SEE: ) 由此可见Server端对于URL的长度是有限制的那么对于GET方法可以传输的数据也是有限制的只是这个限制可能根据服务器的处理能力而定或者在哪里哪里配置就不是很清楚了(俺又开始瞎猜这貌似不是什么好习惯的说) 下面开始瞎掰 其实这是可以理解的URL长度不可能没有限制的Http协议毕竟是UDP的而一个UDP包毕竟是有大小限制的那么POST为什么就能传递大批量数据呢?在apache module里面尝试了读取post数据之前还真没有什么深刻的理解只不过用一个“流”字打法之而已实际上POST数据解析的时候是分块来读取的如果从UDP的角度来理解的话就可是分成好多个UDP包传过来一个一个读出来就好了 |