HTTP请求方法的有效载荷

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

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

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

  • 哪些方法能够(应该?)接收有效载荷
    • 可以接收有效载荷的方法,他们如何接收?
      • 通过URL中的查询string?
      • 通过URL编码的身体?
      • 通过生/分块的身体?
      • 通过以上的([所有/某些])的组合?

我很感激所有的input,如果你可以分享一些(最好是轻的)阅读,那也太好了!

RFC 7231 ,HTTP 1.1语义和内容是关于HTTP方法语义的最新和权威的来源。 该规范指出,对于可能包含在GET,HEAD,OPTIONS或CONNECT消息中的有效内容,没有定义的含义。 4.3.8节说客户端不能发送TRACE请求的主体。 所以,只有TRACE不能有一个有效载荷,但是GET,HEAD,OPTIONS和CONNECT可能不会,如果客户端发送一个(意味着它可以忽略它),那么服务器不需要知道如何处理它。

如果您认为有什么不明确的地方,那么您可以通过邮件列表来expression您的疑虑。

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

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

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

我没有testing过CONNECTPATCH方法,因为我对它们没有兴趣。

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

(注:我说这不是很清楚,因为一个GET请求在技术上可以升级到另一个协议;实际上,一个websockets版本就是这样做的,而一些代理软件可以正常工作,而另一些则握手握手。

POST一般都有一个body。 没有什么阻止你使用查询string,但是POST主体通常会在POST中包含表单数据。

对于更多(更详细的)信息,我会碰到实际的HTTP / 1.1规格 。

    Interesting Posts