Forms HTTP方法(动词)的用途是什么?
我已经阅读了一些关于HTTP方法的资料,但我仍然不清楚最简单的事情:它们是用来干什么的 我看到的每一个资料都指出了什么时候应该使用特定的方法,但是在实践中它会发生什么变化呢?比如说,GET和POST处理请求的方式有什么不同吗 或者这些方法允许我们在一个URL上处理多个行为 最后,浏览器呢?表单只能发出GET和POST请求,它们以不同的方式处理它们。POST表单“在后台”发送数据,而GET在URL中传递数据。它是否与协议有关,或者只是浏览器的惯例Forms HTTP方法(动词)的用途是什么?,forms,http,httpverbs,Forms,Http,Httpverbs,我已经阅读了一些关于HTTP方法的资料,但我仍然不清楚最简单的事情:它们是用来干什么的 我看到的每一个资料都指出了什么时候应该使用特定的方法,但是在实践中它会发生什么变化呢?比如说,GET和POST处理请求的方式有什么不同吗 或者这些方法允许我们在一个URL上处理多个行为 最后,浏览器呢?表单只能发出GET和POST请求,它们以不同的方式处理它们。POST表单“在后台”发送数据,而GET在URL中传递数据。它是否与协议有关,或者只是浏览器的惯例 提前感谢您为我澄清。:) 基本上,是的,存在允许与
提前感谢您为我澄清。:) 基本上,是的,存在允许与每个“实体”进行不同“交互”的方法。HTTP的设计使您可以将每个URL视为一个实体
表示所有用户/users
表示一个特定用户/users/dave
用于创建新用户POST/users
用于修改特定用户PUT/users/dave
获取用户列表GET/users
用于查询名为“dave”的用户列表GET/users?name=dave
GET
意味着“被动”的信息检索,而POST
,PUT
和DELETE
意味着破坏性的改变
浏览器和其他客户端处理这些问题的方式不同。任何GET
都可以在任何时候被请求任意次数,可以被缓存,可以预取,可以无序查询。更具破坏性的操作应仅在请求时执行一次,而不是缓存、预取或任何其他操作。如果您正在“重新加载”通过POST
请求的页面,浏览器将明确要求确认
POST表单“在后台”发送数据,而GET在URL中传递数据。它是否与协议有关,或者只是浏览器的惯例
“背景”是错误的思维方式。区别在于URL和请求主体之间。
GET
请求的请求正文中不应/不得包含任何内容。同样,这只是被动信息检索,必须完全由HTTP头组成。POST
请求可以有一个请求正文。请求的URL和正文中都可以包含“数据”。同样,假设GET
url可以共享和传递,因为它只是指向信息的链接<另一方面,code>POST请求需要经过深思熟虑,因此其信息不应该也不需要出现在URL中。我大部分时间都在web浏览器中使用HTTP,因此可能我对HTTP协议的理解被破坏了。网页的每个动作都有不同的URL,比如/users/edit、users/delete等等。这就是我一直认为的——你想做些不同的事情,改变URL。但我知道它是针对单独的管理页面的,这些页面都是通过GET
请求的。表单操作大多指向同一URL。我可以假设这一切都是针对有效的HTTP使用的吗?另外,还有很多API也遵循这种约定。例如,删除内容不会在/users/dave
上使用DELETE
方法,而是使用类似于/users/DELETE/dave
的方法。这是错误的吗?这里有两个问题:1)如果您仅通过HTTP与API交互,则不需要/users/dave/edit
。您只需将/users/dave
与请求正文中的所有数据放在一起。当然,没有人真正手工编写HTTP请求。现在,这只适用于RESTful API交互/users/dave/edit
是为您提供填写该数据的界面所必需的。2) 浏览器传统上只支持GET
和POST
,而不支持其他方法。这主要是实现中的一个不幸缺陷。自从SPA(单页应用程序)出现以来,它在客户端上的所有视图都是Javascript,并且在服务器上实际上只有一个RESTful API,HTTP的“正确”使用就比以前更加现实了。对。也许作为一个经验法则,试着保留你的URL,这样任何普通的GET
请求都会有意义。您可以POST/users/dave
在正文中包含数据,但也可以简单地GET/users/dave
/users/dave
是一个可以对其执行不同操作的实体。这些操作的“修饰符”应该放在查询参数中,例如GET/users/dave?profile=full
。这些动词不一定要和其他动词有意义。