HTTP-Get和HTTP-POST之间有什么区别,为什么HTTP-POST在安全性方面更弱

任何人都可以解释HTTP-GET和HTTP-POST之间的区别吗? 为什么人们说HTTP-POST在安全性方面比较弱?

在HTTP GET请求中,在URL中指定键/值对:

http://server/something?value1=foo&value2=bar

在HTTP POST请求中,键/值对作为HTTP请求的一部分在头部之后发送。 例如:

  POST /东西HTTP / 1.1
 主机:服务器
 内容长度:21
 内容types:application / x-www-form-urlencoded

 值1 = FOO&VALUE2 =巴

很难将其中一个描述为比另一个更安全或更不安全,但是HTTP POST数据在URL中不可见,并且当向网站提交数据时,HTTP POST通常只能作为用户交互的结果来执行(例如点击“提交”button)。

这意味着用户不能被诱骗访问像http://server/update_profile?name=I_suck的URL,敏感数据不会在URL中公开。

您也可以使用html表单(使用POST)来防止其他forms的跨站请求伪造。

通常,POST应该用于可能修改服务器状态的请求,而GET应该用于只读操作。

HTTP规范根据其意图来区分POST和GET:

GET是幂等的:它是为了获取资源,而不用改变服务器上的任何东西。 因此,重新提交GET请求应该是完全安全的。

POST不是:它用于更新服务器上的信息。 因此,不能认为重新提交请求是安全的,这是大多数浏览器在POST请求中刷新时要求确认的原因。

在安全方面,没有区别。 POST可能更隐晦,但这是一个非常不同的事情。 需要在另一层添加安全性,例如SSL。

关于GET请求的一些说明:

  1. GET请求可以被caching
  2. GET请求保留在浏览器历史logging中
  3. GET请求可以加书签
  4. 处理敏感数据时绝不能使用GET请求
  5. GET请求有长度限制
  6. GET请求只能用于检索数据

关于POST请求的一些说明:

  1. POST请求从不caching
  2. POST请求不会保留在浏览器历史logging中
  3. POST请求不能被添加书签
  4. POST请求对数据长度没有限制

(来源:W3学校)

我不会调用POST比GET更安全。 当使用GET时,参数显示为URL的一部分,因此任何敏感数据都将立即显示给用户。 但是,查看甚至更改HTTP请求的任何部分都是微不足道的,因为POST不能通过URL传递数据,所以仍然可以很容易地读取。 除非您使用HTTPS,否则GET和POST将以易于访问的forms传输数据。

GET方法仅用于数据检索, 不应有任何副作用 。 但POST是为了这个特定的目的:改变服务器端的数据。

通过在页面上放置图像,同时伪造POST请求并不那么容易(这也是为什么您应该只允许授权的POST请求的原因),可以很容易地看到GET请求(请参阅跨网站请求伪造 )。