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)
在Web Api中实现Http方法(Get,Put,Post,Delete)