HTTP中GET和POST对比

HTTP中GET和POST对比

0x01 摘要

网上有不少文章直接拿出结论即GET比POST快,但是POST比GET安全,却没有给出详细的解释,我查了一些资料同大家分享下。

0x02 效率

  • GET操作有缓存,可以使多次客户端相同请求值会对服务器发送一个请求。
  • POST的header和body会分两次提交 -> 暂未证实

0x03 安全性

  • GET相较而言不安全,因为GET请求一般来说参数就是在URL里,很容易被他人获取,还有可能被放入浏览器历史记录,非常容易泄露敏感信息。

  • 而POST的参数放在请求体里面。

0x04 长度限制

  • 虽然HTTP协议没有规定,但是主流浏览器和服务器都对GET方法URI长度进行了自己的限制,所以某些场景必须使用POST
  • HTTP协议也没有规定POST长度,但是一般可调整服务器配置的POST长度限制,一般比GET大,而且有些数据格式只能用POST比如文件

0x05 可靠性

  • 多数浏览器对于POST请求采取两阶段发送:header->body。这就导致了一些额外的传输开销和意外情况发生的可能性

0x06 缓存

  • GET请求会被缓存
  • POST请求不进行缓存

0x07 幂等

  • GET请求是幂等的,也就是说一般GET请求无论执行多少次结果都应该相同,不应该改变数据库。比如持续刷新时不会造成用户自己填写的数据变更时。比如浏览新闻网站,百度首页等。再比如搜索时(因为搜索操作一般不会改变数据库)。
  • POST请求非幂等,操作会对数据库造成影响。比如写了一篇博客,或者填写了一些注册信息,此时应该用POST请求提交,不能刷新。
    There are several misconceptions about GET and POST in HTTP. There is one primary difference, GET must be idempotent while POST does not have to be. What this means is that GETs cause no side effects, i.e I can send a GET to a web application as many times as I want to (think hitting Ctrl+R or F5 many times) and the requests will be ‘safe’

I cannot do that with POST, a POST may change data on the server. For example, if I order an item on the web the item should be added with a POST because state is changed on the server, the number of items I’ve added has increased by 1. If I did this with a POST and hit refresh in the browser the browser warns me, if I do it with a GET the browser will simply send the request.

On the server GET vs POST is pure convention, i.e. it’s up to me as a developer to ensure that I code the POST on the server to not repeat the call. There are various ways of doing this but that’s another question.

To actually answer the question if I use GET or POST to perform the same task there is no performance difference.

You can read the RFC for more details.

0x08 适用性

  • 使用POST时,一般可以用来做一些增删改之类的操作,因为不能直接在浏览器输入就操作
  • 而GET操作对应的连接应该足够安全。比如某个GET地址对应是删除某个用户信息,那应该出现一个确认的页面,而不是直接删除,否则很容易误操作。

0x09 总结

  • 如果数据变更少,参数少,数据量小,安全级别低(不怕被存入历史记录),可以使用HTTP GET。
  • 高安全操作如增删改查,上传下载文件等,可以使用HTTP POST。在RESTful应用程序中,POST通常会被覆盖以提供PUT和DELETE调用。

0xFF 参考文档

How to: Choose between HTTP POST and HTTP GET requests for ASP.NET AJAX Endpoints

Why GET method is faster than POST in HTTP?

When do you use POST and when do you use GET?

URIs, Addressability, and the use of HTTP GET and POST

GET传参最大长度的理解误区

关于 HTTP GET/POST 请求参数长度最大值的一个理解误区

发布了191 篇原创文章 · 获赞 114 · 访问量 17万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览