HTTP请求方法的有效负载

时间:2011-05-06 01:28:15

标签: http rest request http-method payload

Wikipedia entry on HTTP列出了以下HTTP请求方法:

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

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

  • 哪些方法能够(应该?)接收有效负载
    • 可以接收有效负载的方法,它们如何接收?
      • 通过网址中的查询字符串?
      • 通过URL编码的正文?
      • 通过raw / chunked body?
      • 通过以上的[[全部/部分])的组合?

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

3 个答案:

答案 0 :(得分:83)

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

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

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

我没有测试 CONNECT PATCH 方法,因为我对它们没有兴趣。

答案 1 :(得分:28)

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

如果您认为任何内容含糊不清,那么您可以a mailing list表达您的疑虑。

答案 2 :(得分:3)

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

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

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

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