`

get,post数据长度的限制

 
阅读更多

这个问题在我的开发中也遇到,所以在此贴出来(也是在网上搜出来的,呵呵)
这是原贴地址http://blog.csdn.net/somat/archive/2004/10/29/158707.aspx
两个长度限制问题的分析(来源于项目)
一、问题起因
在某项目释放后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

分享到:
评论

相关推荐

    ajax快速解决参数过长无法提交成功的问题

    查了很多资料都说,get方法的参数是有限制的,post方法的参数的长度是无限制,这也是post相比get的优势一直。 在ajax中使用post方法,用常规的参数格式:param1=a1&param2=a2 ,当参数长度过长时,依然提交不成功。...

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

    GET 请求有长度限制 1、在浏览器上表现的区别 GET和POST使用区别 POST POST 请求不会被缓存 POST 请求不会保留在浏览器历史记录中 POST 不能被收藏为书签 POST 请求参数在URL中的是不可见的 POST 请求对数据长度没有...

    get和post请求的区别.pdf

    此外,GET请求对URL长度有限制,这限制了可以发送的数据量。 相比之下,POST请求用于向服务器发送数据,通常用于提交表单数据或上传文件。当浏览器发送POST请求时,数据被包含在请求体中,而不是URL中。这意味着...

    Web应用安全:HTTP方法.pptx

    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 ...长度限制 http协议没有限制,但是实际浏览器或服务 器有(最大2048) 理论上没有,可能会收到服务器配置或内存限制 数据类型限制 只能ASCII

    Android中post和get的提交方式【三种】

    其中get请求安全性相比较而言较差,数据长度受浏览器地址栏限制,没有方法体。两种都是较为重要的数据提交方式。现简单介绍一下三种post和get的提交方式。无论是哪种方法实现post和get,get 的访问路径都要携带数据...

    DuckDuckGo POST搜索「DuckDuckGo POST Search」-crx插件

    可以缓存GET请求GET请求保留在浏览器历史记录中可以将GET请求添加为书签GET请求在处理敏感数据时绝不能使用GET请求具有长度限制GET请求应仅用于检索数据有关POST请求的其他说明:永远不会缓存POST请求POST请求不会...

    浅谈PHP表单提交(POST&GET&URL编/解码)

    注意:若要使用GET方法发送表单,URL的长度应限制在1MB字符以内。如果发送的数据量太大,数据将被截断,从而导致意外或失败的处理结果。 对超链接传递的数据进行编/解码: string urlencode(str

    php下通过POST还是GET来传值

    form action=”search_result.... Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节。 一般来说,我们用POST传值作为首选,这样做较为安全。 本文转载自www.cenusblog.com 

    求职有道-接口测试面试题

    get请求是通过url提交的,因为浏览器的地址栏有长度限制,所以get请求是有长度限制的 \4. get请求可以直接通过浏览器url发送 2.http和https的区别? \1. http 是明文传输,超文本传输协议。https是加密传输 ...

    博主所搜寻的面试八股文,高达几万字,使用微软的脑图软件制作而成

    包含以下: 非对称加密,又名公钥加密。为数据的加密和解密提供了一个非常安全的办法,使用一对秘钥,公钥和私钥。私钥只能由一方安全保管,不能外泄,而公钥...Get传输的数据量小,因为受URL长度限制,但效率较高;

    DuckDuckGo POST Search-crx插件

    有关获取请求的其他一些注意事项: 可以缓存请求 在浏览器历史记录中留下请求 获取请求可以添加书签 在处理敏感数据时,永远不会使用GET请求 获取请求具有长度限制 GET请求仅用于检索数据 关于发布请求的其他一些...

    ajax中文乱码如何解决

    大家都知道GET方式提交数据有长度限制,有时我们必须使用POST方式来提交数据。 但对于POST方式,使用上述的几种方法经过多次测试,问题依旧。我郁闷了好几天。 今天把问题解决了,很简单,是使用escape(或...

    javascript表单验证和Window详解

    //方法1:post提交后无长度限制,且编码后内容不可见。 //方法2:get提交有长度限制,并且编码后的内容在地址栏可见 (input 元素) </form> 2、表单的作用:能够把网址、数据一块传输到数据库。 3、动作属性...

    淘特站内搜索引擎(C#版)

    8编码,某些语言如asp,php,有可能在get提交数据时使用的gb2312编码,如果不进行gb2312对utf-8的转换将会出现乱码现象,另外get方法提交数据也会有数据传输长度限制的问题,因此索引接口我们采用了post方法。...

    thinkPHP使用post方式查询时分页失效的解决方法

    在做项目的过程中,因为需要非常多的查询条件,如果以get方式提交表单的话,会因为url长度限制而报错,所以必须使用post方式提交表单数据,但是在分页的过程中,遇到了问题,因为thinkphp自带的分页是以a标签的形式...

    数据请求的时候遇到 Status code: 431 Request Header Fields Too Large

    最后经过查询资料发现由于base64是一段很长很长的字符串,而get的请求在谷歌浏览器中的url长度限制超过8182个字符,所以才会出现了这个问题,所以我们只需要在后端将这个get请求的接口改为post请求的接口即可解决这个...

    PHP程序开发范例宝典III

    实例114 限制输入字符串的长度 171 实例115 验证字符串是否以指定字符串开头 172 实例116 验证身份证号码 174 实例117 验证护照编号 175 实例118 验证车牌号码 176 4.4 自定义验证 177 实例119 验证...

    html入门到放弃笔记

    赵旭 ... ...1、WEB基础知识(了解) 1、Internet - 网 由若干台电脑、手机、平板 通过 网线(WIFI) 连接起来的结构 2、基于Internet上的程序 1、C / S 结构 Client / Server 特点:必须通过指定的客户端软件才能访问...

    网络安全复习.docx

    怎样设置防火墙过滤规则防I匕漏洞岀现: 开启 (l) SQL注入拦截 HTTP行为限制,只允许HEAD / GET / POST三个HTTP行为动作 限制URL长度,防止URL溢出攻击 (4) URL 滤拦藏,过滤特殊行为的URL 10.画出 个通用型网络安全...

Global site tag (gtag.js) - Google Analytics