任何人都可以解释HTTP-GET和HTTP-POST之间的区别吗?为什么人们说HTTP-POST在安全性方面较弱?
答案 0 :(得分:71)
在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通常只能由于用户交互(例如点击“提交”按钮)。
这意味着用户不能被诱骗访问http://server/update_profile?name=I_suck
之类的网址,并且敏感数据不会在网址中公开。
您还可以使用nonces和其他带有html表单的防伪令牌(使用POST)来阻止其他形式的跨站请求伪造。
通常,POST应该用于可能修改服务器状态的请求,而GET应该用于只读操作。
答案 1 :(得分:61)
HTTP specification根据其意图区分POST和GET:
GET是幂等的:它用于获取资源,而无需更改服务器上的任何内容。因此,重新提交GET请求应该是完全安全的。
POST不是:它用于更新服务器上的信息。因此,不能假设重新提交请求是安全的,这就是大多数浏览器在POST请求时点击刷新时要求确认的原因。
在安全性方面,没有区别。 POST可能更加模糊,但这是一个非常不同的事情。需要在另一层添加安全性,例如SSL。
答案 2 :(得分:31)
关于GET请求的一些注意事项:
有关POST请求的一些注意事项:
(来源:W3学校)
答案 3 :(得分:16)
我不会比GET更安全地调用POST。不可否认,当使用GET时,参数显示为URL的一部分,因此任何敏感数据都将立即对用户可见。但是,查看甚至更改HTTP请求的任何部分都是微不足道的,因此,仅仅因为POST不通过URL传递数据,它仍然可以轻松读取。除非您使用HTTPS,否则GET和POST都会以易于访问的形式传输数据。
答案 4 :(得分:9)
GET method仅用于数据检索和should not have any side-effects。但是POST是出于特定目的:改变服务器端的数据。
只需在页面上放置一个图像就可以很容易地获得GET请求(参见Cross-Site Request Forgery),同时伪造POST请求并不容易(这也是您应该只允许授权的POST请求的原因)。 / p>