69

HTTP 上的Wikipedia 条目列出了以下 HTTP 请求方法:

  • HEAD:请求与对应于 GET 请求的响应相同的响应,但没有响应主体。
  • GET:请求指定资源的表示。
  • POST:将要处理的数据(例如,从 HTML 表单)提交到已识别的资源。数据包含在请求的正文中。
  • PUT:上传指定资源的表示。
  • DELETE:删除指定的资源。
  • TRACE:回显接收到的请求,以便客户端可以看到中间服务器进行了哪些更改或添加(如果有)。
  • OPTIONS:返回服务器对指定 URL 支持的 HTTP 方法。这可用于通过请求“*”而不是特定资源来检查 Web 服务器的功能。
  • CONNECT:将请求连接转换为透明的 TCP/IP 隧道,通常是为了通过未加密的 HTTP 代理促进 SSL 加密通信 (HTTPS)。
  • PATCH:用于对资源应用部分修改。

我有兴趣知道(特别是关于前五种方法):

  • 这些方法中的哪一个能够(应该?)接收有效载荷
    • 在可以接收有效载荷的方法中,它们是如何接收的?
      • 通过 URL 中的查询字符串?
      • 通过 URL 编码的正文?
      • 通过原始/分块的身体?
      • 通过上述([全部/部分])的组合?

我感谢所有的输入,如果你能分享一些(最好是轻松的)阅读,那也很棒!

4

3 回答 3

92

以下是RFC 7231的摘要,这是@Darrel发布的链接的更新版本:

  • HEAD - 没有定义的正文语义。
  • GET - 没有定义的正文语义。
  • PUT - 支持身体。
  • POST - 支持正文。
  • DELETE - 没有定义的正文语义。
  • TRACE -支持正文。
  • 选项- 支持正文,但没有使用语义(可能在将来)。
  • CONNECT - 没有定义的正文语义

正如@John还提到的,所有请求方法都支持 URL 中的查询字符串(一个值得注意的例外可能是OPTIONS,如果 URL 是,它似乎只有 [在我的测试中] 有用HOST/*)。

我没有测试CONNECTPATCH方法,因为我对它们 ATM 不感兴趣。

于 2011-05-08T15:10:16.720 回答
34

RFC 7231,HTTP 1.1 语义和内容,是关于 HTTP 方法语义的最新和最权威的来源。该规范说对于可能包含在 GET、HEAD、OPTIONS 或 CONNECT 消息中的有效负载没有定义的含义。第 4.3.8 节说客户端不得为 TRACE 请求发送正文。因此,只有 TRACE 不能有有效负载,但 GET、HEAD、OPTIONS 和 CONNECT 可能不会,并且如果客户端发送一个(意味着它可以忽略它),则不希望服务器知道如何处理它。

如果您认为任何事情都模棱两可,那么您可以通过邮件列表表达您的疑虑。

于 2011-05-06T02:10:31.690 回答
3

我很确定 GET 请求是否可以具有有效负载尚不清楚。GET 请求通常通过查询字符串发布表单数据,对于 HEAD 请求也是如此。HEAD 本质上是 GET - 除了它不需要响应体。

(旁注:我说不清楚,因为 GET 请求在技术上可以升级到另一个协议;事实上,一个版本的 websockets 就是这样做的,虽然一些代理软件可以很好地处理它,但其他人却被握手所困扰。)

POST 通常有一个正文。没有什么能阻止您使用查询字符串,但 POST 正文通常会在 POST 中包含表单数据。

有关更多(和更详细)的信息,我会点击实际的HTTP/1.1 规范

于 2011-05-06T01:31:19.467 回答