我已经阅读了几个关于HTTP方法的消息来源,但我仍然不清楚最简单的事情:它们适用于什么?
我所看到的每个来源都指出应该使用特定的方法,但它在实践中有什么变化?请问如何在GET和POST之间处理请求有什么不同?
或许这些方法允许我们在一个URL上处理多个行为?
最后,浏览器呢?表单只能生成GET和POST请求,并且它们以不同的方式处理它们。 POST表单“在后台”发送数据,而GET在URL中传递它们。它与协议有什么关系,还是只是浏览器的惯例?
提前感谢您为我澄清。 :)
答案 0 :(得分:3)
从根本上说,是的,方法允许与每个“实体”进行不同的“互动”。 HTTP的设计使您可以将每个URL视为一个实体。
/users
代表所有用户/users/dave
代表一个特定用户POST /users
可让您创建新用户PUT /users/dave
可让您修改特定用户GET /users
为您提供用户列表GET /users?name=dave
可让您查询名为“dave”依旧......
这就是设计使用HTTP的方式,每个动词都有一个特定的含义。您可以以任何您想要的方式使用这些动词,但GET
暗示“被动”信息检索,而POST
,PUT
和DELETE
则意味着破坏性更改。
浏览器和其他客户端的处理方式不同。预计任何时候可以随时请求任何GET
,可以缓存,可以预取,可以大部分时间查询。更多破坏性操作应仅在请求时执行一次,而不是缓存,预取或其他任何操作。如果您正在“重新加载”通过POST
请求的页面,浏览器将明确要求确认。
POST表单“在后台”发送数据,而GET在URL中传递它们。它与协议有什么关系,还是只是浏览器的惯例?
“在后台”是错误的思维方式。区别在于网址和请求正文。 GET
请求不应/不得在其请求正文中包含任何内容。同样,它只是被动信息检索,必须只包含HTTP头。 POST
请求可以拥有请求正文。请求可以在其正文中的URL 和中包含“数据”。同样,假设GET
URL可以被共享和传递,因为它只是链接到信息。另一方面,POST
请求需要非常慎重,因此其信息不应该也不需要在URL中。