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

get,post数据长度的限制 2 GET与POST方法的区别(转)

阅读更多

载自:http://www.cnblogs.com/lislok/archive/2008/06/16/1223361.html

 

 

 

这个问题在我的开发中也遇到,所以在此贴出来(也是在网上搜出来的,呵呵)
这是原贴地址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

*******************************************************************************************************************************


 

 

1. get是从服务器上获取数据,post是向服务器传送数据。
  2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
  3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
  4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
  5. get安全性非常低,post安全性较高。


 
 
HTTP请求:GET与POST方法的区别

HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解);
在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。


 
 
 
 
在表单里使用”post”和”get”有什么区别
 
在Form里面,可以使用post也可以使用get。它们都是method的合法取值。但是,post和get方法在使用上至少有两点不同:
1、Get方法通过URL请求来传递用户的输入。Post方法通过另外的形式。
2、Get方式的提交你需要用Request.QueryString来取得变量的值,而Post方式提交时,你必须通过Request.Form来访问提交的内容。

仔细研究下面的代码。你可以运行之来感受一下:

代码
<!--两个Form只有Method属性不同-->
<FORM ACTION=“getpost.asp” METHOD=“get”>
<INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”></INPUT>
<INPUT TYPE=“submit” VALUE=“Method=Get”></INPUT>
</FORM>
<BR>
<FORM ACTION=“getpost.asp” METHOD=“post”>
<INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”></INPUT>
<INPUT TYPE=“submit” VALUE=“Method=Post”></INPUT>
</FORM>

<BR>
<BR>

<% If Request.QueryString(“Text”) <> ““ Then %>
通过get方法传递来的字符串是: “<B><%= Request.QueryString(“Text”) %></B>“<BR>
<% End If %>

<% If Request.Form(“Text”) <> ““ Then %>
通过Post方法传递来的字符串是: “<B><%= Request.Form(“Text”) %></B>“<BR>
<% End If %>

说明
把上面的代码保存为getpost.asp,然后运行,首先测试post方法,这时候,浏览器的url并没有什么变化,返回的结果是:
通过Post方法传递来的字符串是: "Hello World"
然后测试用get方法提交,请注意,浏览器的url变成了:
http://localhost/general/form/getpost.asp?Text=Hello+World
而返回的结果是:
通过get方法传递来的字符串是: "Hello World"
最后再通过post方法提交,浏览器的url还是:
http://localhost/general/form/getpost.asp?Text=Hello+World
而返回的结果变成:
通过get方法传递来的字符串是: "Hello World"
通过Post方法传递来的字符串是: "Hello World"

提示
通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上。如果:
1、 登陆页面可以被浏览器缓存;
2、 其他人可以访问客户的这台机器。
那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,get方法会带来严重的安全性问题。
建议
在Form中,建议使用post方法。

分享到:
评论

相关推荐

    Ajax中get和post区别

    2. 参数长度无限制:Post请求的参数长度理论上没有限制,可以传输大量数据。 3. 无缓存问题:Post请求的结果不会被浏览器缓存,确保结果的准确性。 Get和Post请求的选择 在实际开发中,需要根据不同的场景选择使用...

    深入理解get与post方法的差别

    2. **无长度限制**:由于数据不在URL中传输,POST请求没有长度限制,可以传输大量的数据。 3. **不缓存**:POST请求通常不会被浏览器缓存,因为每次POST请求都可能包含不同的数据,缓存这些请求可能没有意义,甚至...

    ajax POST 与GET提交的区别

    2. **数据长度限制**: - **GET**: 由于URL长度的限制(不同浏览器有所不同,通常不超过2K字节),GET请求能传输的数据量较小。 - **POST**: 没有明确的长度限制,理论上可以传输较大的数据量。 3. **安全性**: -...

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

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

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

    这种方式限制了请求的长度,因为URL有长度限制,同时也意味着GET请求的数据对用户可见,不太适合传输敏感信息。在C#中,我们可以使用`HttpClient`类的`GetStringAsync`方法来发送GET请求并获取返回的字符串数据。 `...

    GET与POST的区别

    "GET与POST的区别" GET和POST是HTTP协议中两种最常用的请求方法,它们都是用来从客户端向服务器端发送请求的,但它们之间有很多不同之处。 GET方法 GET方法是从服务器上获取数据的请求方法。它的主要特点是将参数...

    jquery由GET转成POST方法工具类

    2. **处理GET参数**:检查URL是否包含GET参数,如果有,使用`URLSearchParams` API解析它们,将这些参数添加到POST数据中。 3. **发起POST请求**:使用jQuery的`$.ajax`或简化的`$.post`方法发起POST请求。`$.ajax`...

    get、post区别

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

    Api接口调用封装,实现POSt,GET等数据请求

    Api接口调用封装,实现POSt,GET等数据请求,Api接口调用封装,实现POSt,GET等数据请求,Api接口调用封装,实现POSt,GET等数据请求,Api接口调用封装,实现POSt,GET等数据请求,Api接口调用封装,实现POSt,GET等数据请求,...

    get、post登录

    此外,GET请求还有长度限制,通常不超过2KB,所以如果登录数据量较大,GET方法将无法胜任。 2. POST方法: POST方法则更适合用于提交数据,包括登录这种涉及敏感信息的场景。用户填写的登录信息会被封装在请求体中...

    浅析Get与Post的区别

    浅析Get与Post的区别 Get和Post是两种常用的表单提交方式,在Web开发中经常被使用。但是,很多人并不了解这两种方式的区别,导致在实际开发中出现问题。本文将详细阐述Get和Post的区别,以便读者更好地理解和使用这...

    get、post上传数据到服务器

    理解这两种方法的区别对于开发者来说至关重要,本文将深入探讨GET与POST方法的特点及其应用场景,并通过简单的代码示例来展示如何使用这两种方法上传数据到服务器。 ### GET与POST的基本概念 #### GET方法 GET方法...

    GET与POST用法

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

    PHP GET 和 POST 的区别

    - 数据长度限制:由于URL长度有限,GET请求传输的数据量通常不超过2KB。 - 不适合敏感数据:由于数据明文传输,不应用来传递密码、信用卡号等敏感信息。 - 可被缓存:GET请求可以被浏览器缓存,也可能出现在浏览器的...

    get与post实例

    POST请求没有明显的长度限制,可以发送大量数据。与GET不同,POST请求可能会改变服务器状态,例如创建新的资源。 在VB编程中,我们可以使用Winsock控件或者Microsoft.XMLHTTP对象来实现GET和POST请求。以下是使用VB...

    对Django 中request.get和request.post的区别详解

    Django 中request.get和request.post的区别 POST和GET差异: POST和GET是HTTP协议定义的与服务器交互的方法。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。另外,还有PUT和DELETE方法。 POST和GET都...

    MFC的HttpClient的Get和Post方法

    2. POST方法:POST方法常用于向服务器发送数据,创建新资源或更新现有资源。与GET不同,POST请求的数据放在请求体中,可以携带大量数据,而且对用户不可见。 在MFC中,我们可以使用WinInet库来实现HttpClient,该库...

Global site tag (gtag.js) - Google Analytics