`

<转>表单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一节]

分享到:
评论

相关推荐

    html的表单注册信息的一部分啊.txt

    - **`method`**:指定提交表单数据的方式,常见的有`GET`和`POST`两种方式。这里采用的是`GET`方法,表示将表单数据以URL参数的形式附加在URL后面。 #### 3.2 输入框 ```html &lt;tr&gt;&lt;td&gt;&lt;label for="xm"&gt;&lt;/label&gt;&lt;/td...

    PHP $-GET变量:$POST变量.md

    此外,直接在URL中显示数据可能会导致一些问题,如数据长度限制和潜在的安全问题。因此,在处理敏感数据或大量数据时,推荐使用POST方法并通过`$_POST`数组来处理。 #### 二、$_POST 变量 在PHP中,`$_POST`同样是...

    post and get

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

    ASP入门介绍

    需要注意的是,使用 GET 方法时,URL 的长度应限制在 8192 个字符以内。另外,由于安全性原因,不应使用 GET 方法发送敏感信息。 - POST 方法将表单数据嵌入 HTTP 请求体中,适合于传输大量数据或敏感信息。 - `...

    JSP之表单提交get和post的区别详解及实例

    本文将对JSP中表单提交的GET和POST方法进行详细讲解,并提供实例,帮助开发者更好地理解和掌握这两种方法。 首先,我们来看GET方法。GET方法是HTTP协议中定义的一种请求方法,它将要发送的数据附加在URL后面,以...

    HTML5认识表单.pdf

    表单元素的属性可以根据需求定制,例如`&lt;input&gt;`的`size`和`maxlength`属性限制输入长度,`&lt;select&gt;`的`multiple`属性允许选择多个选项。`&lt;form&gt;`标签的`action`、`name`和`method`属性是构建交互式表单的关键。 6...

    Servlet表单Get和Post方式读取

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

    html阶段性测试题及答案

    `GET`方式将表单数据附加到URL上,数据可见且有长度限制,相对不安全;`POST`方式将数据放在HTTP请求的主体部分,数据不可见,安全性更高,且能传输大量数据。`action`属性确实用于指定表单处理程序(通常是一个...

    Html表单和Server表单

    例如,使用`Request.QueryString["控件名"]`获取GET方式提交的表单值,`Request.Form["控件名"]`适用于POST方式,而`Request["控件名"]`则同时支持两种方式。编码方面,常见的有GB2312、GBK和Unicode,其中Unicode...

    Html基本标签串讲.doc

    - `&lt;form&gt;`用于创建表单,`action`属性指定提交表单的URL,`method`设置提交方式(GET或POST)。 - `&lt;fieldset&gt;`和`&lt;legend&gt;`用于组织表单元素和添加描述。 - `input`标签用于创建各种表单元素,如文本输入框、...

    get和post的区别

    - 受到URL长度限制(大多数浏览器限制为2048个字符),因此不适合传输大量数据。 - **POST**: - 没有明确的数据大小限制,理论上可以传输非常大的数据量。 #### 5. 编码格式 - **GET**: - 默认使用ASCII编码...

    计算机基础 表单PPT学习教案.pptx

    `&lt;form&gt;`标签可以设置`action`属性指定处理表单数据的脚本位置,以及`method`属性指定数据提交的方式,常见的有GET和POST两种方法。 - `&lt;input&gt;`:用于创建各种类型的输入控件,如文本框、密码框等。`type`属性决定...

    jsp通过jspSmartUpload上传和下载文件

    1. **METHOD应设置为POST**:这是因为文件上传通常涉及到较大的数据传输量,而GET方法对URL长度有限制,不适合用来传输文件。因此,在FORM表单中,METHOD属性应当设置为“POST”,即`METHOD="POST"`。 2. **增加...

    HTML网页设计之仿注册网易免费邮箱界面

    这需要设置&lt;form&gt;的`action`属性指向处理表单数据的服务器端脚本(如PHP、Python等),以及`method`属性决定是GET还是POST方式。 总的来说,这个项目涵盖了HTML基础、表单处理、前端验证、CSS样式设计以及响应式...

    关于HTML的Form的get和post

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

    Web应用安全:HTTP协议GET和POST的使用区别实验.docx

    在这个例子中,表单的提交方法为`POST`,提交的目标URL为`a2.php`,提交的数据包括`username`和`age`两个字段。 2. **POST请求头部信息分析** - 在Firebug中可以看到POST请求的头部信息。其中,`Content-Length`...

    对口升学HTML练习——表单和框架.pdf

    1. `&lt;FORM&gt;`标签:定义了一个表单区域,`action`属性指定了处理表单数据的服务器端脚本地址,`method`属性规定了数据如何发送到处理程序(如GET或POST)。 2. `&lt;INPUT&gt;`标签:创建输入字段,例如文本框、密码输入框...

    第二阶段面试汇总.docx

    - 废除:`&lt;rb&gt;`(替换为`&lt;ruby&gt;`)、`&lt;acronym&gt;`(替换为`&lt;abbr&gt;`)、`&lt;dir&gt;`(替换为`&lt;ul&gt;`)、`&lt;isindex&gt;`(使用`&lt;form&gt;`与`&lt;input&gt;`结合替代)、`&lt;listing&gt;`(替换为`&lt;pre&gt;`)、`&lt;xmp&gt;`(替换为`&lt;code&gt;`)、`...

    结合 PHP 使用 HTML 表单

    在Web开发中,HTML表单和PHP是两个关键的组件,它们共同构成了用户与服务器间交互的核心。HTML用于创建用户界面,而PHP则在后台处理数据。本篇将深入探讨如何结合PHP和HTML表单来实现动态网页功能。 首先,HTML表单...

    ajax POST 与GET提交的区别

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

Global site tag (gtag.js) - Google Analytics