HTTP方法GET,POST,PUT和DELETE之间有什么区别

时间:2013-08-23 05:39:02

标签: .net wcf web-services rest http-method

我正在开发REST WCF服务,理论上我知道何时选择用途。

  • GET获取资源
  • PUT更新
  • POST要插入
  • DELETE删除

但是,如果我们不遵循上述规则,假设插入使用GET方法的记录会有什么不利之处?

3 个答案:

答案 0 :(得分:47)

由于HTTP GET方法被指定为幂等,因此可以重新提交GET请求(假设它不会更改服务器上的任何内容)。对于HTTP POST,情况并非如此,根据规范,它可以更改服务器上运行的应用程序的状态。

因此,根据规范,可以对页面执行N次HTTP GET,而不必担心会改变其状态。

不遵守规范可能会产生各种不希望的结果。例如,Web爬网程序遵循GET请求来索引站点,但不是POST。如果您允许HTTP GET请求对数据库进行更改,则可以轻松理解它可能带来的不良后果。

尊重规范就像尊重您的服务或网站与一系列不同消费者之间的协议,这些消费者可以是普通用户的浏览器,也可以是网络抓取工具等其他服务。

您可以构建一个使用GET来插入记录的网站,但是您也应该期望在使用您的网站时构建的任何内容都假设您尊重协议。

作为最后一个示例,Web浏览器在用户尝试刷新HTTP POST请求到达的页面时会警告用户警告可能会重新提交某些数据。如果HTTP GET请求到达页面,则不会获得该层保护内置浏览器。

您可以在此处阅读更多内容:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

答案 1 :(得分:9)

  

但是如果我们不遵循上述规则,假设插入一条使用GET方法的记录,那会有什么不利。

搜索引擎使用GET请求访问您的网页,因此如果您这样做,Google的抓取工具可能会插入您不想要的记录。

通常,人们会将POST用于任何类型的ajax请求,并在请求的正文中使用实际操作。这没有什么不妥,但是你可以使用这个功能,所以你也可以使用它。

答案 2 :(得分:4)

我面临一种情况,我应该使用PUT而不是GET。我有一个许可插入电话去第三方(这是谷歌)。我将一个Ajax GET请求转换为我的Servlet的更新权限调用,并从他们的调用转到外部服务。外部服务需要相当长的时间才能完成请求。与此同时,我在服务器日志中看到了相同权限调用的重复。继续呼叫服务器的浏览器说你做完了吗?因为它是一个GET,浏览器可以尽可能多地调用服务器。浏览器遵循标准,我的代码没有。我有没有遵循标准的问题。