众所周知, 传递小量参数(在没有其他原因,例如隐藏参数值的情况下)推荐使用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方法可以传输的数据也是有限制的。