`
alex09
  • 浏览: 974945 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

表单Post&Get两个长度限制问题的分析

阅读更多
在某项目释放后Bug统计的附件《释放后问题》里有:

问题一:CSV处理时,如果处理的主题数过多,发生URL参数上限的错误。
原因:可变长度的参数通过URL方式传递,会造成这种潜在的错误发生。
分析:1、属于2次发生问题,开发方面没有及时通过checklist等方式向组员传达相关注意事项;
         2、测试时没有作大批量数据的测试。
备注:1、作为经验添加至CheckList中,加强组内共享、检查的效果。
         2、加强测试点是否完备的检查,重点关注对开发方面共性问题的测试。

问题二:通过对模块原有GUI状况确认,进行CSV输出时,输出结果很大的场合,CSV文件的内容不能输出。
原因:没有考虑到POST数据量存在128K的大小限制。
分析:这属于新问题,以前从未遇见过,也没有进行过大规模的数据量测试。
备注:已将此类检查列出CheckList中。

做为一种经验积累,这些问题、原因及解决办法将被列入Checklist,那么:

第一个问题:URL参数上限的提法准确吗?上限是多少?
第二个问题:为什么POST时数据有限制?限制是128K吗? 

二、问题分析

问题一:

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字节的限制。 

问题二:

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最大数据量
        ...

结论(写入Checklist):
使用ASP时,需要考虑POST表单每个域一般读取处理时有100KB的限制。充分考虑是否使用Request.Binary。

参考资料:

1、Maximum URL Length Is 2,083 Characters in Internet Explorer
2、Hypertext Transfer Protocol--HTTP/1.1
3、PRB: Error "Request Object, ASP 0107 (0x80004005)" When You Post a Form
4、IIS 6.0 Troubleshooting [Client Requests Error-out or Time-out一节]
分享到:
评论

相关推荐

    ajax POST 与GET提交的区别

    接下来,我们将从多个方面详细分析GET和POST之间的区别: 1. **数据传输位置**: - **GET**: 参数被附加在URL之后,通过URL传输数据。 - **POST**: 数据放在HTTP消息体中传输。 2. **数据长度限制**: - **GET**:...

    POST/GET提交测试工具-可自定义UA、Cookies等

    GET主要用于获取资源,它将参数附加到URL后面,对数据的长度有限制,并且通常会被浏览器记录在历史记录和缓存中,因此不适合传输敏感信息。而POST方法则用于向服务器发送数据,通常用于表单提交,可以处理大量数据,...

    get、post登录

    - 数据量:GET有长度限制,POST无明确限制,理论上可以传输大量数据。 - 缓存:GET请求可被浏览器缓存,POST请求一般不被缓存。 - 历史记录:GET请求会被保存在浏览器的历史记录中,POST请求则不会。 - 重播:GET...

    Servlet表单Get和Post方式读取

    5. **请求大小限制**:GET请求的URL长度有限制,一般不超过2KB,而POST请求可以携带大量数据。 了解了这些基础后,我们可以创建一个简单的Servlet应用,其中包括一个HTML表单,用户输入数据后,Servlet接收到这些...

    Http协议中POST和GET方法的本质区别

    GET请求的URL长度有限制,因此不适合传输大量或敏感数据,而POST请求则不受此限制。此外,GET请求的数据会显示在浏览器的历史记录和书签中,POST请求的数据则不会,这对隐私保护有一定影响。 在RESTful架构中,HTTP...

    get、post区别

    - **GET**:受URL长度限制,通常最大为2048个字符,因此不适合传输大量数据。 - **POST**:没有固定的大小限制,理论上可以传输大量数据,但实际应用中也会受到服务器配置和性能的限制。 #### 4. 编码格式 - **GET*...

    HTTP_POST_GET.rar_Http get post_http get_http post_http post ge

    7. 数据长度:GET请求数据有限制,POST无明确限制。 在编程中,开发者需要根据具体需求选择GET或POST。例如,获取静态页面内容通常用GET,而提交表单、上传文件等操作则更适合用POST。在开发Web应用时,理解这两种...

    post and get

    在这个例子中,我们有两个表单,一个使用`GET`方法,另一个使用`POST`方法。当用户提交表单后,服务器端脚本(如PHP)可以根据请求类型的不同,采用不同的处理方式。 #### 六、其他注意事项 1. **GET**请求只应当...

    android基础 - POST GET

    - GET请求可能导致重复提交,POST请求更适用表单提交。 - GET请求可以被搜索引擎抓取,可能影响SEO,而POST请求则不会。 - 数据传输时,确保敏感信息已加密,防止中间人攻击。 通过理解这些基本概念和实践,开发者...

    http get post 请求模拟器

    此外,GET请求对数据长度有限制,通常不超过2KB。 2. POST请求: POST请求则常用于向服务器提交数据,如表单提交。与GET不同,POST请求的数据包含在请求体中,不会显示在URL上,因此更适合处理敏感信息。POST请求...

    get与post实例

    在IT行业中,HTTP协议是网络通信的基础,而GET和POST是HTTP协议中最常见的两种请求方法。本文将深入探讨GET和POST的区别、应用场景以及VB(Visual Basic)中如何使用它们。 GET和POST是HTTP请求的核心方法,用于从...

    GET与POST用法

    - **数据大小限制**:GET方法受URL长度限制,因此不适合传输大量数据;而POST方法没有明确的大小限制。 - **缓存机制**:GET请求可以被浏览器缓存,而POST请求则不会被缓存。 - **幂等性**:GET请求是幂等的,多次...

    网络发包工具 POST/GET

    GET请求的数据量有限,一般不超过2KB,因为URL长度有限制。GET请求是幂等的,意味着多次执行同一个GET请求,服务器的结果应该是一样的,不会改变服务器状态。 网络发包工具允许用户自定义请求头(Headers),比如...

    关于HTML的Form的get和post

    例如,如果表单中有两个字段name和email,那么提交后的URL可能会变成`http://example.com/form?name=value&email=value2`。这种形式的数据在浏览器的历史记录、缓存和书签中都是可见的,因此不适合传输敏感信息。 -...

    C# 使用Get和Post请求获取数据

    这限制了GET请求能传递的数据量,因为URL长度有限制。在C#中,你可以使用`HttpClient`类的`GetStringAsync`方法来发送GET请求,如下所示: ```csharp using System.Net.Http; using System.Threading.Tasks; ...

    http本地post,get工具

    GET请求有长度限制,并且所有参数都是可见的,适合用于获取不涉及修改的数据,如网页内容。 **本地测试工具**: 这个工具允许用户在本地进行HTTP POST和GET请求的测试,这对于开发人员来说非常有用,可以模拟客户端...

    利用ethereal对http封包中的post和get分析

    GET方法用于请求获取资源,其参数通过URL携带,且URL长度有限制,通常用于查询操作。POST方法则用于提交数据,数据被封装在请求正文中,可携带大量数据,适合于数据提交、表单提交等场景。 2. 分析POST请求: 在...

    服务器端测试GET、POST

    GET请求的参数限制在URL的长度内,且对数据量有限制,一般不超过2KB。由于参数直接在URL中显示,所以GET请求不适合传递敏感信息。此外,GET请求会被浏览器缓存,可能导致安全问题。 POST方法则更为复杂,常用于提交...

    GET与POST请求DEMO

    2. 有长度限制:URL的最大长度有限制,通常为2KB左右,所以GET请求不能传输大量数据。 3. 缓存:浏览器可以缓存GET请求,提高性能,但可能造成数据过时。 4. 可被书签:GET请求可以被用户书签,方便再次访问。 POST...

    jquery由GET转成POST方法工具类

    然而,在某些场景下,可能需要将原本采用GET方式传递的请求转换为POST,以避免URL过长、敏感信息暴露在地址栏等问题。本文将详细探讨如何利用jQuery实现这个转换,并介绍相关知识点。 首先,我们需要了解GET和POST...

Global site tag (gtag.js) - Google Analytics