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

Bra*_*ter 50 rest

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

Mik*_*ler 72

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

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

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

 POST /something HTTP/1.1
 Host: server
 Content-Length: 21
 Content-Type: application/x-www-form-urlencoded

 value1=foo&value2=bar

很难真正将其描述为比另一个更安全或更不安全,但HTTP POST数据在URL中不可见,并且在向网站提交数据时,HTTP POST通常只能由于用户交互而执行(例如,单击"提交"按钮).

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

您还可以使用带有html表单(使用POST)的随机数和其他防伪令牌来防止其他形式的跨站点请求伪造.

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


bra*_*ter 63

HTTP规范区分POST和他们的意图而言GET:

GET是幂等的:它用于获取资源,而无需更改服务器上的任何内容.因此,重新提交GET请求应该是完全安全的.

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

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


Shi*_*din 32

关于GET请求的一些注意事项:

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

有关POST请求的一些注意事项

  1. POST请求永远不会被缓存
  2. POST请求不会保留在浏览器历史记录中
  3. POST请求无法加入书签
  4. POST请求对数据长度没有限制

(资料来源:W3学校)


Bri*_*sen 17

我不会比GET更多或更不安全地调用POST.不可否认,当使用GET时,参数显示为URL的一部分,因此任何敏感数据都将立即对用户可见.但是,查看甚至更改HTTP请求的任何部分都是微不足道的,因此,仅仅因为POST不通过URL传递数据,它仍然可以轻松读取.除非您使用HTTPS,否则GET和POST都会以易于访问的形式传输数据.


Gum*_*mbo 9

GET方法是为唯一的数据检索和不应该有任何的副作用.但POST是出于特定目的:改变服务器端的数据.

只需在页面上放置图像就可以很容易地获得GET请求(请参阅跨站点请求伪造),同时伪造POST请求并不容易(这也是您应该只允许授权的POST请求的原因).