post 相比get 有很多优点,为什么现在的HTTP通信中大多数请求还是使用get?


好吧, 除了哲学方式的回答以外,下面是一个浏览器从业人员的看法

事实上GET 和 POST 在实践上面有非常大的区别,这两种方法在语义上面并非能互相取代。

POST 是否比 GET 安全

是的, POST要比GET安全一点点,注意,是一点点。。。

说这两者都是明文传送当然是没有错的了,但是这里有一个细节,就是GET的URL会被放在浏览器历史和WEB 服务器日志里面。

POST 发完基本就木有了。。

所以如果你把关键数据放在GET里面,被人偷窥了浏览器,或者WEB服务器被入侵日志被人倒去了,基本泄露可能性100%。而POST来说,日志没有记录,只要数据库服务器不被入侵,基本还是安全的。

当然如果被抓了包,这一切都没有什么卵用,所以,HTTPS该用还是得用。


GET 相对 POST 的优势是什么

最大的优势是, GET 的URL可以人肉手输啊。。。你在地址栏打个POST给我看看。本质上面, GET 的所有信息都在URL, 所以很方便的记录下来重复使用。

所以如果你希望
- 请求中的URL可以被手动输入
- 请求中的URL可以被存在书签里,或者历史里,或者快速拨号里面,或者分享给别人。
- 请求中的URL是可以被搜索引擎收录的。
- 带云压缩的浏览器,比如Opera mini/Turbo 2, 只有GET才能在服务器端被预取的。
- 请求中的URL可以被缓存。

请使用GET.

大家有没有注意到,其实这里面很多方面的要求是和网站的运营相关的,而不是技术相关的。任何的技术行为中,其实多多少少都能看到商业的影子。

反之,就用POST. 特别是有一些东西你是不想让人家可以在浏览器地址栏里面可以输入的。比如,如果你设计一个blog系统, 设计这样一个URL来删掉所有帖子。

http://myblog.com/?action=delete_all

我只能说很快你就知道什么叫不作死就不会死这个道理了,搜索引擎的爬虫分分钟教你做人。

另外一个准则是,可以重复的交互,比如取个数据,跳个页面, 用GET.
不可以重复的操作, 比如创建一个条目/修改一条记录, 用POST, 因为POST不能被缓存,所以浏览器不会多次提交。

WEB API 的设计相对于网页来说更加复杂,同时也有GET/POST的问题,目前主流接受的方法是RESTful, 参见这里

Representational state transfer

这个是趋势:


同时对于何时用GET, W3C 也有一篇文章专门解释:
w3.org/2001/tag/doc/whe

摘一点出来:

1.3 Quick Checklist for Choosing HTTP GET or POST

  • Use GET if:
    • The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).

and

  • Use POST if:
    • The interaction is more like an order, or
    • The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or o The user be held accountable for the results of the interaction.

However, before the final decision to use HTTP GET or POST, please also consider considerations for sensitive data and practical considerations.



作者:罗志宇
链接:http://www.zhihu.com/question/31640769/answer/52824098
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




先来列举一下get和post的区别
  1. Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器服务器对它的限制,众所周知,IE是浏览器里面最烂的,貌似url长度限制也是最短的2083个字符,所以为了让所有的用户都能正常浏览,最好GET的长度不要超过2083字符。POST按照协议来说是没有限制的,但是一般服务器都有限制,比如java使用的tomcat默认限制是2M,可以配置server.xml的一个参数maxPostSize=“0”取消限制
  2. GET请求能够被cache,GET请求能够被保存在浏览器的浏览历史里面(密码等重要数据GET提交,别人查看历史记录,就可以直接看到这些私密数据)POST不进行缓存(正所谓线上在牛逼,抵不上线下挖掘机是一样的道理)。这就是POST比GET安全的原因吗?那你告诉我HTTPS用来干嘛?(那么HTTPS是否应该废除??)PS:虽然用GET是能够造成CSRF攻击的!
  3. 某些数据只能用POST不能用GET携带,比如file
  4. GET和POST的语义不一样,详情请参考RESTFUl的设计
  5. 多数浏览器(除了firefox)在AJAX中对于POST采用两阶段发送数据的,先发送请求头,再发送请求体。详情请看这篇文章-->YSLOW法则中,为什么yahoo推荐用GET代替POST?(请不要怀疑yahoo前端35条优化法则)还有这篇文章josephscott.org/archive
看了这些你还觉得get应该被废除吗?存在即合理,所以不要滥用GET的POST!

作者:谢照东
链接:http://www.zhihu.com/question/31640769/answer/52782267
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值