带请求正文的HTTP GET

带请求正文的HTTP GET

我正在为我们的应用程序开发一个新的RESTful Web服务。

在某些实体上执行GET时,客户端可以请求实体的内容。如果他们想要添加一些参数(例如排序列表),他们可以在查询字符串中添加这些参数。

或者,我希望人们能够在请求正文中指定这些参数。 HTTP / 1.1似乎没有明确禁止这一点。这将允许他们指定更多信息,可以更容易指定复杂的XML请求。

我的问题:

  • 这完全是一个好主意吗?

  • HTTP客户端在GET请求中使用请求主体会有问题吗?

http://tools.ietf.org/html/rfc2616


九州编程
浏览 1417回答 5
5回答

绝地无双

罗伊菲尔丁关于将一个机构纳入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标识”被删除了。 - 来自评论

智慧大石

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

慕姐8265434

restclient和REST控制台都不支持这个,但卷曲确实如此。的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发送消息体,但是如果所有服务器都不支持它,那么它就不会让我感到惊讶。
打开App,查看更多内容
随时随地看视频慕课网APP