为了账号安全,请及时绑定邮箱和手机立即绑定

带请求正文的HTTP GET

带请求正文的HTTP GET

九州编程 2019-05-22 15:01:20
带请求正文的HTTP GET我正在为我们的应用程序开发一个新的RESTful Web服务。在某些实体上执行GET时,客户端可以请求实体的内容。如果他们想要添加一些参数(例如排序列表),他们可以在查询字符串中添加这些参数。或者,我希望人们能够在请求正文中指定这些参数。 HTTP / 1.1似乎没有明确禁止这一点。这将允许他们指定更多信息,可以更容易指定复杂的XML请求。我的问题:这完全是一个好主意吗?HTTP客户端在GET请求中使用请求主体会有问题吗?http://tools.ietf.org/html/rfc2616
查看完整描述

5 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

罗伊菲尔丁关于将一个机构纳入GET请求的评论

是。换句话说,任何HTTP请求消息都允许包含消息体,因此必须解析消息。但是,GET的服务器语义受到限制,使得正文(如果有的话)对请求没有语义含义。解析的要求与方法语义的要求是分开的。

所以,是的,你可以使用GET发送一个正文,不,这样做永远不会有用。

这是HTTP / 1.1的分层设计的一部分,一旦规范被分区(正在进行中),它将再次变得清晰。

罗伊....

是的,您可以使用GET发送请求正文,但它不应该有任何意义。如果你通过在服务器上解析它并根据其内容更改响应来赋予它意义,那么你忽略了HTTP / 1.1规范第4.3节这个建议:

[...]如果请求方法不包含实体主体的定义语义,则在处理请求时应该忽略消息主体。

HTTP / 1.1规范中的GET方法的描述,第9.3节

GET方法意味着检索Request-URI标识的任何信息([...])。

其中声明请求主体不是GET请求中资源标识的一部分,只是请求URI。

更新 引用为“HTTP / 1.1规范”的RFC2616现已过时。2014年,它被RFC 7230-7237取代。引用“处理请求时应该忽略消息体”已被删除。它现在只是“请求消息框架独立于方法语义,即使该方法没有定义消息体的任何用途”第二个引用“GET方法意味着检索任何信息......由Request-URI标识”被删除了。 - 来自评论


查看完整回答
反对 回复 2019-05-22
?
智慧大石

TA贡献1946条经验 获得超3个赞

如果您尝试利用缓存,则可能会遇到问题。代理人不会在GET主体中查看参数是否会对响应产生影响。


查看完整回答
反对 回复 2019-05-22
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

restclientREST控制台都不支持这个,但卷曲确实如此。

HTTP规范说,在第4.3节

如果请求方法的规范(第5.1.1节)不允许在请求中发送实体主体,则消息主体不得包含在请求中。

第5.1.1节将我们重定向到第9.x节的各种方法。他们都没有明确禁止包含消息体。然而...

第5.2节

通过检查Request-URI和Host头字段来确定Internet请求标识的确切资源。

9.3节

GET方法意味着检索由Request-URI标识的任何信息(以实体的形式)。

这一点一起表明,在处理GET请求时,服务器不需要检查Request-URI和Host头字段之外的任何其他内容。

总之,HTTP规范并不会阻止您使用GET发送消息体,但是如果所有服务器都不支持它,那么它就不会让我感到惊讶。


查看完整回答
反对 回复 2019-05-22
  • 5 回答
  • 0 关注
  • 1416 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信