关于URL,POST传递值的大小限制问…

来源:互联网 发布:学校宿舍手机网络屏蔽 编辑:程序博客网 时间:2024/06/01 09:54

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

 

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、第二个问题:为什么POST时数据有限制?限制是128K吗?

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

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

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

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

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

    IIS6.0默认上传文件的最大大小是4MB。

    IIS6.0默认最大请求头是16KB。

    IIS6.0之前没有这些限制。


3、第三个问题:现在用ajax进行post提交,需要传递的这个字符串很长,大概有116万个字符长度,每次都传递不过去,服务端那边接受的值是null,当我截取前90W个字符进行传递的时候,就能传递过去了
不是说post传递没有大小限制的吗?

问题找到了,POST传递没问题,是servlet那边的问题
因为那边,我是采用request.getParameter来获取的参数,因为map集合装不了116W那么大的字符串,是map集合崩溃了
所以在servlet那边,改用request.getInputStream()流来读取就没事了

更多0


阅读全文
0 0