哪些HTTP方法需要正文?
一些HTTP方法,如哪些HTTP方法需要正文?,http,Http,一些HTTP方法,如POST,要求在头和双CRLF之后发送正文 其他的,例如GET,没有主体,对于它们来说,双CRLF标记请求的结束 但是其他的呢:放,删除。。。如何知道哪一个需要身体 通用HTTP客户端应该如何对未知HTTP方法作出反应?拒绝它?默认情况下需要实体,还是默认情况下不需要实体 如能提供相关规范的指针,将不胜感激 编辑:我将根据评论中的提问,详细说明我的问题 我正在设计一个通用HTTP客户端,程序员可以使用它向任何服务器发送任意HTTP请求 客户端可以这样使用(伪代码): 数据是
POST
,要求在头和双CRLF
之后发送正文
其他的,例如GET
,没有主体,对于它们来说,双CRLF
标记请求的结束
但是其他的呢:放
,删除
。。。如何知道哪一个需要身体
通用HTTP客户端应该如何对未知HTTP方法作出反应?拒绝它?默认情况下需要实体,还是默认情况下不需要实体
如能提供相关规范的指针,将不胜感激
编辑:我将根据评论中的提问,详细说明我的问题 我正在设计一个通用HTTP客户端,程序员可以使用它向任何服务器发送任意HTTP请求 客户端可以这样使用(伪代码): 数据是可选的,可以是原始数据(字符串),也可以是键/值对的关联数组 如果数据是一个数组,则库将对其进行url编码,然后将数据附加到url以进行
GET
请求,或者将其发送到消息体中以进行POST
请求
因此,考虑到开发人员选择的HTTP方法,我试图确定此HttpClient是否必须/应该/不应该/不应该在请求中包含消息体。编辑:编译列表:
- 实体主体仅在存在消息主体时才存在(第7.2节)
- 通过包含
或内容长度
头(第4.3节)来表示消息正文的存在传输编码
- 当请求方法的规范不允许发送实体正文时,不得包含消息正文(第4.3节)
- 实体主体仅在跟踪请求中被明确禁止,所有其他请求类型均不受限制(第9节,特别是第9.8节)
- 是否包含消息正文取决于请求方法和响应状态(第4.3节)
- 明确禁止在响应HEAD请求时使用消息体(第9节,特别是第9.4节)
- 1xx(信息性)、204(无内容)和304(未修改)响应中明确禁止消息正文(第4.3节)
- 所有其他响应都包括一个消息体,尽管它可能是零长度的(第4.3节)
(RFC 7231)或版本(来自IETF&更深入)是您想要的。根据RFC: 对于
放置:
PUT方法要求将封闭的实体存储在
提供的请求URI。如果请求URI引用已存在的
资源,则应将封闭的实体视为已修改的实体
位于源服务器上的版本。如果请求URI
不指向现有资源,并且该URI能够
请求用户代理将其定义为新资源
源服务器可以使用该URI创建资源。如果有新的资源
创建时,源服务器必须通过201通知用户代理
(创建)响应。如果修改了现有资源,则
应发送200(正常)或204(无内容)响应代码以指示
成功完成请求。如果资源不可用
使用请求URI创建或修改,这是一个适当的错误
应作出反映问题性质的回应。这个
实体的收件人不得忽略任何内容-*(例如。
内容范围)它无法理解或实现的标题,以及
在这种情况下,必须返回501(未实现)响应
对于删除:
DELETE方法请求源服务器删除资源
由请求URI标识。此方法可能会被人工覆盖
在源服务器上进行干预(或其他方式)。客户不能
确保已执行操作,即使
从源服务器返回的状态代码表示该操作
已成功完成。但是,服务器不应该
表示成功,除非在给出响应时,它打算
删除资源或将其移动到无法访问的位置
如果响应中包含
描述状态的实体,202(已接受)(如果操作尚未完成)
已颁布,或204(无内容),如果行动已颁布,但
响应不包括实体
如果请求通过缓存并且请求URI标识
一个或多个当前缓存的实体,应处理这些条目
陈腐的。对此方法的响应不可缓存
对于任意方法,或者您不希望在服务器端支持的有效方法,HTTP状态代码405应发送回调用方
根据:
405方法不允许使用
该资源不支持请求方法;[2] 例如,使用
使用要求通过POST或使用
放在只读资源上
您可能需要阅读当前HTTP规范草案中关于消息正文长度的部分:从您的评论中,我知道您正在编写一个HTTP客户端库(为什么,还不够?)。您想知道方法的数据是必需的还是禁止的
假设你的库的用户知道他们在做什么。如果我想发送一个带有GET请求的实体,我可以,因为规范并不禁止这样做。那么为什么你的图书馆要这样做呢
此外,HTTP规范在这方面是开放的;HTTP的扩展(如WebDAV)可以指定允许或不允许甚至需要消息体的新方法(动词)
我
HttpClient.request(method, url [, data]);
OPTIONS
GET
HEAD
POST
PUT
DELETE
CONNECT