当前位置: 首页 > 面试题库 >

带请求正文的HTTP GET

寿鸣
2023-03-14
问题内容

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

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

另外,我希望人们能够在请求正文中指定这些参数。 HTTP / 1.1似乎并未明确禁止这样做。这将使他们能够指定更多信息,可能使指定复杂的XML请求更加容易。

我的问题:

这是个好主意吗?
HTTP客户端在GET请求中使用请求主体时会遇到问题吗?
http://tools.ietf.org/html/rfc2616


问题答案:

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

因此,是的,您可以使用GET发送正文,否,这样做永远没有用。

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

....罗伊

是的,您可以发送带有GET的请求正文,但它没有任何意义。如果您通过在服务器上对其进行解析并根据其内容更改响应来赋予它含义,那么您将忽略HTTP / 1.1规范 第4.3节中的建议:

…如果请求方法不包括用于一个实体主体定义的语义,则该消息体应该被处理请求时忽略。

以及HTTP / 1.1规范第9.3节 中 GET方法的描述:

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

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

更新资料

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

根据HTTP 1.1 2014 Spec :

GET请求消息中的有效负载没有定义的语义。在GET请求上发送有效内容正文可能会导致某些现有实现拒绝该请求。



 类似资料:
  • 问题内容: 我想通过PHP 在Blogger博客中添加帖子。Google提供了以下示例。如何在PHP中使用它? 您可以通过向带有帖子JSON正文的帖子集合URI发送POST请求来为博客添加帖子: 问题答案: 您需要使用cURL库发送此请求。 如果由于某种原因您不想/不想使用cURL,可以这样做:

  • 因此,我试图使用wiremck向带有请求正文的URL发出后请求,然后使用我的respons.json文件返回响应。(自定义响应) 我就是这样设置的,但我似乎找不到任何关于如何设置带有请求主体的post存根(包含数据,比如说尝试创建ID),然后检索自定义响应主体(从json文件创建ID响应)的信息。我该怎么设置呢。我尝试通过json文件请求生成id,然后尝试检索创建的id。 WithBodyFile

  • 我在ReactJS中编程时使用Axios,我假装向服务器发送DELETE请求。 为此,我需要标题: 而身体是由 我一直在互联网上搜索,只发现DELETE方法需要一个“参数”,不接受“数据”。 我一直试图这样发送: 或者甚至 但似乎没有什么工作... 有人能告诉我是否有可能(我想是这样)发送一个包含标题和正文的删除请求,以及如何做到这一点吗? 提前谢谢你!

  • 问题内容: 我在ReactJS编程时使用Axios,我假装将DELETE请求发送到我的服务器。 为此,我需要标题: 身体是由 我一直在互联网上进行搜索,仅发现DELETE方法需要一个“参数”,并且不接受“数据”。 我一直试图像这样发送它: 甚至 但是似乎没有任何作用… 有人可以告诉我是否有可能(可能是这样)发送带有标头和正文的DELETE请求,以及如何发送? 先感谢您! 问题答案: 因此,经过多次

  • 问题内容: 我有这个API: 但是in始终返回null。我可以将@GET更改为@POST,并且可以使用,但是我并没有真正执行创建或更新操作,因此使用post似乎很奇怪。 有没有办法通过球衣的GET请求获得身体? 问题答案: TL; DR 正确的解决方案是使用POST。 “我可以将@GET更改为@POST,并且可以,但是我并没有真正执行创建或更新操作,因此使用post似乎很奇怪” 为什么这么奇怪?P

  • 问题内容: 我正在编写自己的logginMiddleware。基本上,我需要记录请求和响应的正文。我面临的问题是,当我阅读正文时,它变成空的,无法两次阅读。我知道发生这种情况是因为它属于ReadCloser类型。有没有一种方法可以将身体重绕到开始? 问题答案: 检查和嘲笑请求正文 初次阅读主体时,必须对其进行存储,以便在处理完该主体之后,可以将新的主体设置为根据原始数据构造的请求主体。因此,当您在