GET POST方法长度限制

时间:2021-01-24 12:07:20

http://blog.csdn.net/blueling51/article/details/6935901

1.    Get方法长度限制

Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。

如:IE对URL长度的限制是2083字节(2K+35)。

下面就是对各种浏览器和服务器的最大处理能力做一些说明.

Microsoft Internet Explorer (Browser)

IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
Firefox (Browser)

对于Firefox浏览器URL的长度限制为65,536个字符。

Safari (Browser)

URL最大长度限制为 80,000个字符。

Opera (Browser)

URL最大长度限制为190,000个字符。

Google (chrome)

URL最大长度限制为8182个字符。

Apache (Server)

能接受最大url长度为8,192个字符。

Microsoft Internet Information Server(IIS)

能接受最大url的长度为16,384个字符。

通过上面的数据可知,为了让所有的用户都能正常浏览, URL最好不要超过IE的最大长度限制(2083个字符),当然,如果URL不直接提供给用户,而是提供给程序调用,这时的长度就只受Web服务器影响了。

注:对于中文的传递,最终会为urlencode后的编码形式进行传递,如果浏览器的编码为UTF8的话,一个汉字最终编码后的字符长度为9个字符。

因此如果使用的 GET 方法,最大长度等于URL最大长度减去实际路径中的字符数。

2.    POST方法长度限制

理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。

如:在Tomcat下取消POST大小的限制(Tomcat默认2M);

打开tomcat目录下的conf目录,打开server.xml 文件,修改

<Connector

debug="0"

acceptCount="100"

connectionTimeout="20000"

disableUploadTimeout="true"

port="8080"

redirectPort="8443"

enableLookups="false"

minSpareThreads="25"

maxSpareThreads="75"

maxThreads="150"

maxPostSize="0"

URIEncoding="GBK"

</Connector>

增加红色字体部分 maxPostSize="0" (设为0是取消POST的大小限制)

 

http://www.cnblogs.com/hannover/archive/2010/01/04/1639271.html

第一个问题:URL参数上限的提法准确吗?上限是多少?

第二个问题:为什么POST时数据有限制?限制是128K吗?  

二、问题分析

1、第一个:

1)URL不存在参数上限的说法。该问题实际是IE对URL有长度限制的问题。

2)HTTP协议规范也没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。[参1]

3)“可变长度的参数通过URL方式传递”实际是说提交表单时使用了GET方法,而不是POST方法。造成这种潜在错误的是使用GET方法提交表单数据。因为GET方法将数据放在URL里传递给服务器处理。

4)注意这个限制是整个URL长度,而不仅仅是你的参数值数据长度。

5)既然是IE对URL长度的限制,那么不管是GET方法还是POST方法都存在这个限制。

(关于FORM的GET和POST方法具体内容请参考相关资料[参2])  

建议:

1)了解应用程序所在的环境,如web应用的浏览器、服务器环境,了解其特定的参数限制情况。

2)提交复杂数据尽量使用POST方法。注意FORM不写method属性时默认是使用GET方法。

结论(写入Checklist):

对使用GET方法提交数据时,在IE环境下,需要考虑URL长度2083字节的限制。 

2、第二个:

1)理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制。

2)“POST数据量存在128K的大小限制”不够准确,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。

3)对于ASP程序,Request对象处理每个表单域时存在100K的数据长度限制。但如果使用Request.BinaryRead则没有这个限制。对于需要处理超过100K表单域数据的解决办法,请参考后面的[参3]。

4)由这个延伸出去,对于IIS 6.0,微软出于安全考虑,加大了限制[参4]。我们还需要注意:

    IIS 6.0默认ASP POST数据量最大为200KB,每个表单域限制是100KB。

    IIS 6.0默认上传文件的最大大小是4MB。

    IIS 6.0默认最大请求头是16KB。

    IIS 6.0之前没有这些限制。

建议:

1)弄清楚运行环境的默认设定值有助于你的设计及对出现的问题做快速的解决。

2)应该考虑服务器版本。各个版本的IIS对这些参数的默认设定都不一样,有必要的话,找资料整理出一份对照表。这样开发与测试时都有个参考。

3)IIS 6.0的这些限制实际只是它的默认设定值而已,实际应用环境你可以修改它们。

    在WINNT\system32\inetsrv\MetaBase.xml里默认定义了:
        AspBufferingLimit="4194304"           对应于上传文件最大大小
        AspMaxRequestEntityAllowed="204800"
   对应于POST最大数据量