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

Posted

技术标签:

【中文标题】HTTP方法GET,POST,PUT和DELETE有啥区别【英文标题】:What is difference between HTTP methods GET, POST, PUT and DELETEHTTP方法GET,POST,PUT和DELETE有什么区别 【发布时间】:2013-08-26 01:46:15 【问题描述】:

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

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

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

【问题讨论】:

您有这样做的理由吗? 我不知道为什么要遵循上面的规则,如果我们不遵循那有什么缺点呢? 公约。可预测性。为什么要在道路左侧行驶(在美国是右侧)? 除了其他答案之外,更改状态的 GET 请求存在安全风险 @Seer 使用GETS 更改数据使CSRF 攻击者更容易一些。当然,这并不意味着 POST/PUT 本质上是安全的,它们仍然需要使用令牌进行保护以防止 CSRF。 【参考方案1】:

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

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

不遵守规范可能会产生各种不良结果。例如,网络爬虫通过 GET 请求来索引站点,而不是 POST。如果您允许 HTTP GET 请求对数据库进行更改,您可以轻松理解它可能产生的不良影响。

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

您可以构建一个使用 GET 插入记录的站点,但您还应该期望,为使用您的站点而构建的任何内容都在您遵守协议的假设下运行。

作为最后一个示例,当用户尝试刷新由 HTTP POST 请求到达的页面时,Web 浏览器会警告用户可能会重新提交某些数据。如果通过 HTTP GET 请求访问该页面,您将无法获得内置浏览器的那一层保护。

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

【讨论】:

那么,有什么区别呢?独特的是,如果我将 URL“www.google.com”放入浏览器,它显然会“获取”请求的网页。请编辑您的回复并解释 GET、PUT 等动词与来自浏览器的简单网页请求有何不同。【参考方案2】:

但是如果我们不遵循上面的这条规则有什么缺点,假设插入一条我使用 GET 方法的记录。

搜索引擎使用 GET 请求访问您的网页,因此如果您这样做,谷歌的爬虫可能会插入您不想要的记录。

通常,人们将 POST 用于任何类型的 ajax 请求,实际操作在请求的正文中。这并没有什么太大的问题,但是该功能是供您使用的,所以您不妨使用它。

【讨论】:

【参考方案3】:

我遇到了一种情况,我应该使用 PUT 而不是 GET。我有一个权限插入调用给第三方(这是谷歌)。我向我的 Servlet 发送 Ajax GET 请求以更新权限调用,并从他们的调用转到外部服务。外部服务花费了大量时间来完成请求。同时,我在服务器日志中看到了相同权限调用的重复。是浏览器不断调用服务器说你完成了吗?因为它是 GET 并且浏览器可以尽可能多次调用服务器。浏览器遵循标准,而我的代码没有。我遇到了不符合标准的问题。

【讨论】:

以上是关于HTTP方法GET,POST,PUT和DELETE有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

REST模式中HTTP请求方法(GET,POST,PUT,DELETE)

GET,POST,PUT,DELETE的区别 和 用法

在Web Api中实现Http方法(Get,Put,Post,Delete)

HTTP协议六种请求方法,get,head,put,delete,post有什么区别

post、get、put、patch、Delete的区别

delete post put get请求参数