好吧,我知道目的的差异。 GET是得到一些数据。 做一个请求和找回数据。 POST应该用于读取相比,我相信其他的CRUD操作。 但是,当它发生的时候,服务器是否会真正关心它是否最终接受GET与POST?
Answer 1:
既然你是一个编写服务器软件(可能),那么,如果你告诉它关心在乎。 如果您处理POST和GET相同的数据,则没有,没有。
但是,浏览器绝对问津。 刷新或点击回到了你作为一个POST的响应会弹出一个小页面“您确定要提交的数据再次”的提示,例如。
Answer 2:
根据HTTP RFC,GET应该不会有什么副作用,而POST可能有副作用。
这样做的最基本的例子是GET不适合像购买,交易什么或张贴了一篇文章,一个博客,而POST是适当的行动,该具备的,后果。
由RFC,你可以按住负责通过POST进行动作(如购买)用户,而不是GET操作。 “机器人总是使用GET这个原因。
从RFC 2616,9.1.1 :
9.1.1安全的方法
实现者应该注意,相当于用户在
它们之间的相互作用在互联网上,而应该小心,让用户知道任何行动的可能有他们可能会
意想不到的意义给自己或他人。特别是,该公约已经确定,GET和
HEAD方式不应该采取行动的重要意义
比其他的检索。 这些方法应该被认为是“安全”。 这允许用户代理代表其他方法,如POST,PUT和DELETE,以特殊的方式,让用户知道的是正在请求操作可能是不安全的事实。当然,这是不可能的,以确保服务器不会
产生的副作用如执行GET请求的结果; 事实上,一些动态资源认为这是一个特点。 这里最重要的区别在于用户没有请求的副作用,因此,因此不能被追究责任。
Answer 3:
它如果一个搜索引擎抓取的页面,因为他们将作出GET请求而不是POST。 假设你有你的页面上的链接:
http://www.example.com/items.aspx?id=5&mode=delete
如果没有某种之前删除执行授权检查的,它可能是Googlebot可以进来和删除项目从您的网页。
Answer 4:
GET具有基于浏览器发送数据限制限制:
对URL长度的规范没有规定最小或最大URL长度,但通过执行浏览器而异。 在Windows上:Opera支持〜4050个字,IE 4.0以上版本支持正是2083个字符,网景3 - > 4.78支持多达8192个字符的关机导致错误之前,和Netscape 6支持〜2000年在启动时造成的错误之前
Answer 5:
如果使用GET请求来改变后端状态,运行的不好的事情发生,如果某种形式的WebCrawler的遍历你的网站的风险。 回来时,维基开始流行,有被删除的整个网站的恐怖故事,因为“删除页面”功能是作为一个GET请求来实现,带来灾难性的后果,当Googlebot的来敲门...
Answer 6:
“使用GET,如果:交互更像是一个问题(即,它是一个安全的操作,如查询,读取操作,或查找)。”
“使用POST,如果:交互更像是一个命令,或者相互作用改变的方式,用户将感知(例如,订阅服务),或者用户追究的结果负责该资源的状态互动“。
资源
Answer 7:
通过HTTP规范,GET是安全的和幂和POST两者都不是。 这意味着,一个GET请求,可以重复多次,而不会引起副作用。
即使您的服务器不关心(这是不可能的),有可能是您的客户端和服务器之间的中间代理商,所有的人都有这样的期望。 对于您的ISP或其他供应商以提高性能例如代理来缓存数据。 同样的预期是加速器真实的,例如,预取插件的浏览器。
因此GET请求可以被缓存(基于某些参数),和如果失败,它可以自动而不有害影响的任何expecation重复。 所以,真的是你的服务器应该努力履行本合同。
在另一方面,POST并不安全,不幂等,每个代理知道不缓存POST请求的结果,或自动重试POST请求。 因此,例如,信用卡交易将永远,永远是一个GET请求(你不想被帐户中扣除,因为网络错误多次,等等)。
这是上这是一个非常基本走。 欲了解更多信息,你可以考虑用Ruby和理查德森(奥赖利按)“REST Web服务”一书。
对于一个快速对REST的话题,认为这篇文章:
http://www.25hoursaday.com/weblog/2008/08/17/ExplainingRESTToDamienKatz.aspx
有趣的是,大多数人辩论PUT v POST的优点。 一开始v POST问题是,而且一直都是,很好的解决。 在你自己的危险忽略它。
Answer 8:
GET对浏览器端的限制。 例如, 有些浏览器限制了GET请求的长度。
Answer 9:
我觉得更合适的答案,就是你几乎可以做与两个同样的事情。 这与其说是偏好的问题,但是,但是的问题。 我会建议你使用GET和POST他们打算如何使用。
Answer 10:
你知道的一些细微的安全上的差异。 见我的问题
GET与POST在安全方面?
本质上需要记住的重要一点是,GET将进入浏览器历史记录,并通过纯文本代理进行传输,所以你不希望任何敏感信息,就像在一个GET密码。
也许明显,但值得一提的。
Answer 11:
如果用户能够书签结果页面? 考虑的另一件事是一些浏览器/服务器错误限制了GET URI长度。
编辑:纠正字符长度限制注- ARS的感谢!
Answer 12:
这取决于在服务器端软件。 有些库,像CGI.pm在Perl在默认情况下可以同时处理。 但是,在有些情况下,你或多或少都有使用POST而不是GET,至少将数据推送到服务器。 大量的数据(其中相应的GET URL会变得太长),二进制数据(以避免大量的编码/解码的麻烦),多文件,非解析头(连续更新预AJAX风格...)及类似。
Answer 13:
服务器在技术上一点也不在乎的一种方式或其他有关它接收什么样的要求。 它会盲目地执行跨线未来的任何请求。
这就是问题所在。 如果您有破坏或在修改数据的动作GET
动作,谷歌会撕裂你的网站,因为它通过抓取索引。
Answer 14:
服务器通常不关心。 但它主要用于以下良好做法,因为你所提到的。 该客户端还事 - 如提到你不能一个书签页面POST'd通常,有些浏览器对URL的长度很长的GET查询的限制。
Answer 15:
由于GET适用于指定的资源,你想要得到的,这取决于在服务器端软件准确,Web服务器(或者在它前面的负载均衡器)可能对GET请求大小限制以防止拒绝服务攻击...
Answer 16:
要知道,浏览器可能会缓存GET请求,但通常不会缓存POST请求。
Answer 17:
是的,这很重要。 GET和POST是完全不同的,真的。
你是正确的,通常,GET是“获得”从服务器获取数据并显示一个页面,而POST是“发布”的数据返回给服务器。 在内部,你的脚本会得到相同的数据无论是GET或POST,所以没有,服务器并不真正关心。
主要的区别是GET参数在指定的URL,而POST不是。 这就是为什么POST用于注册和登录表单 - 你不想在URL密码。 同样,如果您正在浏览不同的网页或显示一些特定的数据视图,通常要一个唯一的URL。
Answer 18:
从技术上讲,没有。 所有GET确实是张贴的东西在HTTP请求的第一行,并在主体立柱帖子的东西。
但是,“网络基础设施”如何对待的差异,使不同的世界。 我们可以写一个关于它的整本书。 不过,我会给你一些“最佳实践”:
使用“POST”当你的HTTP请求会改变一些“具体” web服务器内。 也就是说,您正在编辑一个页面,制作一个新的记录,依此类推。 帖子不太可能被缓存,或作为东西的“重复无副作用”处理
使用时要“看对象”,“GET”的。 现在,这样的外观可能会改变东西在缓存或记录保存方面的“幕后”,但它不应该改变什么“实质性”。 也就是说,我可以一遍又一遍地重复我的GET并没有什么不好的事情发生,除了充气命中计数。 GET动作应该很容易可收藏,这样用户就可以回到那个同一个对象以后。
该参数的GET(之后的东西吗?传统上)应该算是“属性视图”或“如何查看”等。 再次,它不应该真正改变什么:使用POST了点。
并且,最后一句话,当你发布内容(例如,您要创建一个新的评论),对后一个问题的302处理“重定向”的用户到该观点认为对象的新网址。 即,后处理信息,然后在浏览器重定向到一个GET语句,查看新的状态。 显示信息作为POST的结果,也可能会造成问题。 这样做的重定向通常使用,使事情更好地工作。
Answer 19:
不,他们不应该只是@ jbruce2112答案,并上传文件需要进行后期处理。