GET方法和POST方法的区别,Get方法到底可传递的字符串的最大长度是多少?

GET方法和POST方法的区别,Get方法到底可传递的字符串的最大长度是多少?曾经人介绍,如果使用GET方式传输参数,URL的最大长度是256个字节,对此深信不疑.

但是最近看到一些超长的url,能够在IE下工作,复制下来测算了一下长度,大概是650个字节,这个长度远远超过了256个字节.这时候对以前的说法不由得有些怀疑—-用各大搜索引擎翻了个遍,最后找到最权威的解释—-Maximum URL length is 2,083 characters in Internet Explorer.———Microsoft Internet Explorer的最大统一资源定位符(URL)长度为2,083个字符。

Internet Explorer的最大路径长度为2,048个字符。此限制适用于POST请求和GET请求URL。

如果使用GET方法,则最多限制为2,048个字符,减去实际路径中的字符数。

但是,POST方法不受提交名称/值对的URL大小的限制。这些对在标题中传输,而不是在URL中传输。

RFC 2616,“超文本传输​​协议 – HTTP / 1.1”,未指定对URL长度的任何要求。

没错,IE的url最大长度是2083个字节,可以用于GET传递数据的长度是2048个字节,这个数字不小,远超过256这个曾经认为无比正确的数字.

另外POST方式传递的数据不受这个长度影响,它的值通过浏览器header传输而不是url.

浏览器

经过实际测试:

1、在IE8 下的URL地址总长度为:4076,超过该长度会自动忽略后面的内容;

2、在firefox 25下的URL地址总长度可以达到:7530,超过该长度会访问错误;

3、在chrome 29.0.1547.62 的最大总长度达到:7675,超过该长度会访问错误;

由此可见,在以前的浏览器下,或许URL的最大长度为256是可能的(现在找不到IE6或以前的版本来测试),随着浏览器的更新升级支持的长度也会随着变化。

服务器

1、apach

apache 能接受url长度限制为8 192 字符

2、IIS

Microsoft Internet Information Server(IIS)能接受url长度限制为16 384个字符。

3、Perl HTTP::Daemon

Perl HTTP::Daemon 至少可以接受url长度限制为8000字符。Perl HTTP::Daemon中限制HTTP request headers的总长度不超过16 384字节(不包括post,file uploads等)。但当url超过8000字符时会返回413错误。
这个限制可以被修改,在Daemon.pm查找16×1024并更改成更大的值。

4、ngnix

可以通过修改配置来改变url请求串的url长度限制。

client_header_buffer_size 默认值:client_header_buffer_size 1k

large_client_header_buffers默认值 :large_client_header_buffers 4 4k/8k

注意事项:

由于jsonp跨域请求只能通过get请求,url长度根据浏览器及服务器的不同而有不同限制。
若要支持IE的话,url长度限制为2083字符,若是中文字符的话只有2083/9=231个字符。
若是Chrome浏览器支持的最大中文字符只有8182/9=909个。

上一篇:Mysql高手系列 - 第14篇:详解事务


下一篇:Sets 比赛时想错方向了。。。。 (大数不能处理负数啊)