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

我正在开发REST WCF服务和理论上我知道什么时候select什么目的。

  • GET获取资源
  • 请更新
  • POST到插入
  • DELETE删除

但是,如果我们不遵循上述规则,假设插入一条logging,我使用了GET方法,那又有什么缺点呢?

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

因此,通过规范,可以对一个页面执行一次HTTP GET,而不用担心改变其状态。

不尊重规范可能会有各种不希望的结果。 例如,Web爬虫通过GET请求来索引站点,但不是POST。 如果您允许HTTP GET请求对数据库进行更改,则可以轻松理解其可能具有的不良影响。

遵守规范就像是尊重你的服务或网站和一系列不同的消费者之间的协议,这些消费者可以是普通用户的浏览器,也可以是其他服务,比如networking爬虫。

你可以build立一个使用GET来插入logging的站点,但是你也应该期望无论是build立在什么地方来使用你的站点,都是在假定你遵守协议。

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

你可以在这里阅读更多: http : //www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

但是如果我们不遵循上述规则,假设插入一个logging,我使用了GET方法。

search引擎使用GET请求访问你的页面,所以如果你这样做,谷歌的爬虫可能会插入你不想要的logging。

通常,人们将使用POST来处理任何types的Ajax请求,并在请求的正文中使用实际的操作。 这个没什么大不了的,但是这个function在那里供你使用,所以你不妨使用它。

我面临的情况是我应该使用PUT而不是GET。 我有一个权限插入电话去第三方(这是谷歌)。 我旋转一个Ajax GET请求更新权限调用到我的Servlet,并从他们的电话去外部服务。 外部服务花费相当多的时间来完成请求。 同时我在服务器日志中看到了同样的权限调用的重复。 一直在打电话给服务器的是浏览器,说完了吗? 因为它是一个GET,浏览器可以尽可能多地调用服务器。 浏览器遵循标准,我的代码没有。 我没有遵循标准的问题。