【问题标题】:How to send a body request with GET如何使用 GET 发送正文请求
【发布时间】:2018-09-17 10:50:27
【问题描述】:

我正在使用 angularjs,从我的服务中,我必须使用路径参数 (id)、查询参数(var1 和 var2)和正文请求( {"codes": ["1000"]}) - 必须在 get 方法中作为字符串数组发送(我知道,发送正文请求应该在 POST 中完成)。

到目前为止,在我的服务中,我有这个:

        function getSub(id, var1, var2) {
           var payload = {
               first: var1,
               second: var2
           };

           var url = 'sub/' + id + '/mylink'
           return api.get(url, payload, {"codes": ["1000"]}).then(function (response) {
               console.log("READ RESPONSE ", response);
               return response;
           });
        };

到目前为止,我得到的只是与未提供的响应正文相关的错误请求错误。

这可能是一个菜鸟问题,而不是最佳实践问题,但我需要为此找到解决方案。到目前为止,我在网上到处搜索,只能明白这是一种非正统的body request使用方式。

提前致谢!

【问题讨论】:

    标签: javascript angularjs rest api get


    【解决方案1】:

    是的,您可以使用 GET 发送请求正文,但这没有任何意义。你可以在服务器上解析它并根据它的内容修改你的响应,你在HTTP / 1.1 specification, section 4.3:中忽略这个建议

    【讨论】:

      【解决方案2】:

      据我所知,该标准没有关于 get 类型请求的正文的声明。因此这是一个经典的它取决于实现。无论如何,实现往往不支持这种组合。而XMLHttpRequest 就是其中之一:

      send() 接受一个可选参数,让您指定请求的正文;这主要用于诸如 PUT 之类的请求。如果请求方法是 GET 或 HEAD,则忽略 body 参数,并将请求正文设置为 null。

      【讨论】:

      • 奇怪的是,在 Firefox 中,在网络中,如果我点击 500 获取请求,在标题中点击编辑并重新发送,我有一个名为请求正文的字段,如果我将我的 {"codes": ["1000"]} 放在那里,然后按重新发送,它将变成一个 200 请求(假设我在请求标头中添加了 Content-Type: application/json)。
      • 是的,因为它使用了一些本地组件,而不是暴露给 JavaScript 引擎的组件。看起来您的服务器正在支持此功能。您可以尝试使用fetch api (ma-no.org/en/content/…),但您可能会面临跨浏览器的问题。如果你成功了这个 api,你必须看看你是否可以忍受它。但最好尝试更新服务器代码...
      • 是的,你是对的。它在服务器端进行更改以发布。谢谢!这很有帮助!
      • 这是不正确的。该标准非常明确:“GET 请求消息中的有效负载没有定义的语义;在 GET 请求上发送有效负载主体可能会导致某些现有实现拒绝该请求。” tools.ietf.org/html/rfc7231#section-4.3.1
      • @EricStein,再次阅读您的评论和我的帖子,您会发现我写的差不多。好吧,你是对的,有一句话关于它,但这并不能改变一个事实,即没有强制性声明:它既不被禁止也不被支持。您可能会遇到像 OP 这样的问题,也可能不会,这取决于实现。这远非清楚...
      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      相关资源
      最近更新 更多