浅析 get 和 post 方法的区别

GET和POST是两种最常被用到,客户端(浏览器)和服务器之间进行HTTP请求-响应的方法。其它的方法还有PUT、DELETE等。

GET与POST两者的主要区别在于:

1. 提交请求数据的方式不同

根据HTTP协议规范,GET会把请求数据附加在URL之后,以?分割URL地址和传输数据,参数与参数之间以&连接,请求数据会明文展示在地址栏。同时,GET的请求数据有可能会被浏览器缓存,并保留在浏览器历史记录中。

/test/demo_form.asp?name1=value1&name2=value2

POST发送请求数据时,URL不会发生变化,请求数据是放置在HTTP包的包体中。所以它的请求数据不会被缓存,也不会保留在浏览器历史记录中。

POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

2. 数据大小限制

GET请求会将请求数据附加在URL,那么GET能提交的数据量就跟URL的长度有直接关系了。实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。但是特定的浏览器及服务器会对URL长度有所限制。

POST没有大小限制,HTTP协议规范也没有对它进行大小限制,起限制作用的是服务器的处理程序的处理能力。

3. 服务器端获取方式不一样

  • 服务器端获取GET请求数据用request.querystring("");
  • POST请求数据用request.form("")获取。
    两种方法都可以统一用request("")来获取数据,但是request对象处理表单域时存在数据长度限制,不推荐使用。

4.POST安全性高于GET

GET方法会将请求数据附加在URL,明文展示请求数据,登录页面有可能被浏览器缓存,其他人查看浏览器的历史记录,就可以获取信息。另外,GET还会造成crsf攻击。
GET请求一般只应当用于取回数据。GET仅仅用于获取信息是安全的,一般不会产生副作用。

在form中,method默认是GET,对资源的增删改查,都可以用GET/POST,实际上它们只是发送机制不同而已。不过POST的安全性要高于GET,并且,用到POST必须要用到form。

什么是cross-site request forgery

Cross-site request forgery:跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相 左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其 进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。示例和特性

CSRF攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。例如:一个网站用户Bob可能正在浏览聊天论坛,而同时另一个用户 Alice 也在此论坛中,并且后刚刚发布了一个具有Bob银行链接的图片消息。设想一下,Alice编写了一个在Bob的银行站点上进行取款的form提交的链接, 并将此链接作为图片tag。如果Bob的银行在cookie中保存他的授权信息,并且此cookie没有过期,那么当Bob的浏览器尝试装载图片时将提交 这个取款form和他的cookie,这样在没经Bob同意的情况下便授权了这次事务。

CSRF是一种依赖web浏览器的、被混淆过的代理人攻击(deputy attack)。在上面银行示例中的代理人是Bob的web浏览器,它被混淆后误将Bob的授权直接交给了Alice使用。

http://www.cnblogs.com/wlemory/p/4601928.html
http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
https://blog.csdn.net/qq_33915126/article/details/50665769
http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

你可能感兴趣的:(浅析 get 和 post 方法的区别)