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过CONNECT和PATCH方法,因为我对它们没有兴趣。
我很确定不清楚GET请求是否可以有有效载荷。 GET请求通常通过查询string发布表单数据,对于HEAD请求也是如此。 HEAD本质上是GET – 除了它不需要响应主体。
(注:我说这不是很清楚,因为一个GET请求在技术上可以升级到另一个协议;实际上,一个websockets版本就是这样做的,而一些代理软件可以正常工作,而另一些则握手握手。
POST一般都有一个body。 没有什么阻止你使用查询string,但是POST主体通常会在POST中包含表单数据。
对于更多(更详细的)信息,我会碰到实际的HTTP / 1.1规格 。