form提交方式Get与Post详解

   form做为Html的一个元素,它就是为了客户端提交数据而产生的,它有两个很重要的属性action和method,action属性指明了处理提交的数据的应用程序的URL,而method有两个值:POST,GET,由于浏览器提交数据老是使用HTTP(也有使用HTTPS)协议,而 POST,GET则是HTTP协议传输数据的方式,因此method指明了传输数据的方式,对于一个新的Page所生成的html代码,form老是 method=" POST"的方式提交数据(缘由也有不少,好比数据安全性比Get高):以下html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml" >

<head><title>

    Untitled Page

</title></head>

<body>

    <form name="form1" method="post" action="Default.aspx" id="form1">

        <div>

           <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"             value="/wEPDwUJNzgzNDMwNTMzZGQP0LJECgTtp1lOdVaW3IZPFDdsYw==" />

        </div>

        <div>   

        </div>

    </form>

</body>

</html>
View Code

Get和Post的区别:
1.GET请求的数据会附在URL以后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。GET是经过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其余浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操做系统的支持。数据库

2.Post传递的数据隐藏在HTTP报文中,理论上讲,POST是没有大小限制的HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不许确的,POST数据是没有限制的,起限制做用的是服务器的处理程序的处理能力。浏览器

  对于ASP程序,Request对象处理每一个表单域时存在100K的数据长度限制。但若是使用Request.BinaryRead则没有这个限制。缓存

  由这个延伸出去,对于IIS 6.0,微软出于安全考虑,加大了限制。咱们还须要注意:安全

     1).IIS 6.0默认ASP POST数据量最大为200KB,每一个表单域限制是100KB。
     2).IIS 6.0默认上传文件的最大大小是4MB。
     3).IIS 6.0默认最大请求头是16KB。服务器

3.在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。在asp.net中经过string urlname=Request.QueryString.GetKey(0).ToString(),或是直接提取某个特定的参数string urlname=Request.QueryString("name").ToString();在JSP中,用request.getParameter(\"XXXX\")来获取,虽然jsp中也有request.getQueryString()方法,但使用起来比较麻烦,好比:传一个test.jsp?name=hyddd&password=hyddd,用request.getQueryString()获得的是:name=hyddd&password=hyddd。在PHP中,能够用$_GET和$_POST分别获取GET和POST中的数据,而$_REQUEST则能够获取GET和POST两种请求中的数据。值得注意的是,JSP中使用request和PHP中使用$_REQUEST都会有隐患,这个下次再写个文章总结。asp.net

4.POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不做数据修改,而这里安全的含义是真正的Security的含义,好比:经过GET提交数据,用户名和密码将明文出如今URL上,由于(1)登陆页面有可能被浏览器缓存,(2)其余人查看浏览器的历史纪录,那么别人就能够拿到你的帐号和密码了,除此以外,使用GET提交数据还可能会形成Cross-site request forgery攻击。jsp

  总结一下,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不一样,并非一个取一个发!ide

5.对于Post方式提交表单,刷新页面浏览器会弹出提示框  “是否从新提交表单”,从新根据提交地址则没有提示消息,缘由就是当刷新页面的时候浏览器会偷偷的将页面的数据经过HTTP报文传送给服务器,而直接输网址的话就至关于从新发送一次请求,结果就是打开一个新的页面而不会偷偷传递页面上的数据。而Get不管是刷新仍是根据地址从新提交都不会提示“是否从新提交表单”。post

GET 仍是 POST?

与 POST 相比,GET 更简单也更快,而且在大部分状况下都能用。

然而,在如下状况中,请使用 POST 请求:

  • 没法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

 注:本文章属我的学习总结,部份内容参考互联网上的相关文章。 其中若是发现我的总结有不正确的认知或遗漏的地方请评论告知,欢迎交流。

相关文章
相关标签/搜索