两个长度限制问题的分析(来源于项目)
一、问题起因
在某项目释放后Bug统计的附件《释放后问题》里有:
问题 原因 分析 备注
CSV处理时,如果处理的主题数过多,发生URL参数上限的错误; 可变长度的参数通过URL方式传递,会造成这种潜在的错误发生。 1、属于2次发生问题,开发方面没有及时通过checklist等方式向组员传达相关注意事项;
2、测试时没有作大批量数据的测试; 1、作为经验添加至CheckList中,加强组内共享、检查的效果;
2、加强测试点是否完备的检查,重点关注对开发方面共性问题的测试;
通过对模块原有GUI状况确认,进行CSV输出时,输出结果很大的场合,CSV文件的内容不能输出。 没有考虑到POST数据量存在128K的大小限制。 这属于新问题,以前从未遇见过,也没有进行过大规模的数据量测试 已将此类检查列出CheckList中
做为一种经验积累,这些问题、原因及解决办法将被列入Checklist,那么:
第一个问题: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最大数据量
结论(写入Checklist):
使用ASP时,需要考虑POST表单每个域一般读取处理时有100KB的限制。充分考虑是否使用Request.Binary
相关推荐
这种方式限制了请求的长度,因为URL有长度限制,同时也意味着GET请求的数据对用户可见,不太适合传输敏感信息。在C#中,我们可以使用`HttpClient`类的`GetStringAsync`方法来发送GET请求并获取返回的字符串数据。 `...
- 数据量:GET有长度限制,POST无明确限制,理论上可以传输大量数据。 - 缓存:GET请求可被浏览器缓存,POST请求一般不被缓存。 - 历史记录:GET请求会被保存在浏览器的历史记录中,POST请求则不会。 - 重播:GET...
2. **数据量**:如果数据量较大,超出URL长度限制,则应选择POST。 3. **缓存**:GET请求可以被浏览器缓存,而POST不行。 4. **幂等性**:GET请求具有幂等性,适合用于获取资源;POST不具备幂等性,适用于创建或更新...
2. 参数长度无限制:Post请求的参数长度理论上没有限制,可以传输大量数据。 3. 无缓存问题:Post请求的结果不会被浏览器缓存,确保结果的准确性。 Get和Post请求的选择 在实际开发中,需要根据不同的场景选择使用...
2. 数据可见性:GET数据对所有人可见,POST数据相对隐藏。 3. 安全性:GET请求不适合传输敏感信息,POST更安全。 4. 缓存:GET请求可以被缓存,POST请求一般不被缓存。 5. 历史记录:GET请求会被保存在浏览历史中,...
2. **数据长度限制**: - **GET**: 由于URL长度的限制(不同浏览器有所不同,通常不超过2K字节),GET请求能传输的数据量较小。 - **POST**: 没有明确的长度限制,理论上可以传输较大的数据量。 3. **安全性**: -...
此外,GET请求对数据长度有限制,通常不超过2KB。 2. POST请求: POST请求则常用于向服务器提交数据,如表单提交。与GET不同,POST请求的数据包含在请求体中,不会显示在URL上,因此更适合处理敏感信息。POST请求...
- **数据大小限制**:GET方法受URL长度限制,因此不适合传输大量数据;而POST方法没有明确的大小限制。 - **缓存机制**:GET请求可以被浏览器缓存,而POST请求则不会被缓存。 - **幂等性**:GET请求是幂等的,多次...
- **GET**:受URL长度限制,通常最大为2048个字符,因此不适合传输大量数据。 - **POST**:没有固定的大小限制,理论上可以传输大量数据,但实际应用中也会受到服务器配置和性能的限制。 #### 4. 编码格式 - **GET*...
GET请求的URL长度有限制,因此不适合传输大量或敏感数据,而POST请求则不受此限制。此外,GET请求的数据会显示在浏览器的历史记录和书签中,POST请求的数据则不会,这对隐私保护有一定影响。 在RESTful架构中,HTTP...
POST请求没有明显的长度限制,可以发送大量数据。与GET不同,POST请求可能会改变服务器状态,例如创建新的资源。 在VB编程中,我们可以使用Winsock控件或者Microsoft.XMLHTTP对象来实现GET和POST请求。以下是使用VB...
- 数据大小:GET有长度限制,通常不超过2KB;POST没有严格的限制,但实际应用中受服务器配置影响。 - 安全性:GET因数据可见,对隐私保护较差;POST数据不可见,更适合传递敏感信息。 - 缓存和可书签:GET请求可以被...
由于GET请求的数据是可见的,并且限制了请求长度,所以不适合传输敏感信息或者大量数据。在Winform中,你可以使用`System.Net.WebClient`类或者`System.Net.HttpWebRequest`类来发送GET请求。例如: ```csharp ...
- 数据长度限制:由于URL长度有限,GET请求传输的数据量通常不超过2KB。 - 不适合敏感数据:由于数据明文传输,不应用来传递密码、信用卡号等敏感信息。 - 可被缓存:GET请求可以被浏览器缓存,也可能出现在浏览器的...
2. **无长度限制**:由于数据不在URL中传输,POST请求没有长度限制,可以传输大量的数据。 3. **不缓存**:POST请求通常不会被浏览器缓存,因为每次POST请求都可能包含不同的数据,缓存这些请求可能没有意义,甚至...
此外,对于大量数据传输,POST比GET更合适,因为GET请求的URL长度有限制。同时,使用HTTPS可以进一步增强通信的安全性。 总结,C# WebService客户端和服务器之间的通信是通过HTTP协议的GET和POST方法进行的,这使得...
2. 无长度限制:理论上,POST请求的数据大小无限制,可以发送大量数据。 3. 不可缓存:POST请求一般不会被浏览器缓存,确保每次请求都获取最新数据。 4. 不可被书签:用户无法直接书签POST请求,因为它不直接对应一...
- 数据长度限制,不适合大量数据传输。 - 不适合对数据进行修改,因为GET请求通常被认为是幂等的,即多次请求不会改变服务器状态。 **POST方法** POST方法则是将表单数据放在HTTP请求的主体中,不在URL上显示。...