什么是HTTP方法(动词)?

时间:2015-02-16 01:26:58

标签: forms http httpverbs

我已经阅读了几个关于HTTP方法的消息来源,但我仍然不清楚最简单的事情:它们适用于什么?

我所看到的每个来源都指出应该使用特定的方法,但它在实践中有什么变化?请问如何在GET和POST之间处理请求有什么不同?

或许这些方法允许我们在一个URL上处理多个行为?

最后,浏览器呢?表单只能生成GET和POST请求,并且它们以不同的方式处理它们。 POST表单“在后台”发送数据,而GET在URL中传递它们。它与协议有什么关系,还是只是浏览器的惯例?

提前感谢您为我澄清。 :)

1 个答案:

答案 0 :(得分:3)

从根本上说,是的,方法允许与每个“实体”进行不同的“互动”。 HTTP的设计使您可以将每个URL视为一个实体。

  • /users代表所有用户
  • /users/dave代表一个特定用户
  • POST /users可让您创建新用户
  • PUT /users/dave可让您修改特定用户
  • GET /users为您提供用户列表
  • GET /users?name=dave可让您查询名为“dave”
  • 的用户列表

依旧......

这就是设计使用HTTP的方式,每个动词都有一个特定的含义。您可以以任何您想要的方式使用这些动词,但GET暗示“被动”信息检索,而POSTPUTDELETE则意味着破坏性更改。

浏览器和其他客户端的处理方式不同。预计任何时候可以随时请求任何GET,可以缓存,可以预取,可以大部分时间查询。更多破坏性操作应仅在请求时执行一次,而不是缓存,预取或其他任何操作。如果您正在“重新加载”通过POST请求的页面,浏览器将明确要求确认。

  

POST表单“在后台”发送数据,而GET在URL中传递它们。它与协议有什么关系,还是只是浏览器的惯例?

“在后台”是错误的思维方式。区别在于网址请求正文GET请求不应/不得在其请求正文中包含任何内容。同样,它只是被动信息检索,必须只包含HTTP头。 POST请求可以拥有请求正文。请求可以在其正文中的URL 中包含“数据”。同样,假设GET URL可以被共享和传递,因为它只是链接到信息。另一方面,POST请求需要非常慎重,因此其信息不应该也不需要在URL中。