事实上GET 和 POST 在实践上面有非常大的区别,这两种方法在语义上面并非能互相取代。
http协议规定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不能被缓存,所以浏览器不会多次提交。
如果站在传输协议的角度来看 POST 完全可以代替 GET,会觉得 GET的存在没有必要。如果站在应用协议的角度,任何应用程序都少不了“增删改查”功能,HTTP 协议的方法除了 POST、GET外还有 DELETE和PUT,他们刚好是对应的:POST是添加,DELETE是删除,PUT是修改,GET是查询,至于增删改查的具体内容每个应用都不同,但是他们都可以用URL定位,内容在HTTP里叫做“资源”,所以URL叫“统一资源定位符”。RESTful API 正是按照这种方式来定义的,大家都用 HTTP 协议提供 API 不是偶然,而是就是为此而设计的。