Axios/XMLHttpRequest 在生产环境中发送 GET 而不是 POST

问题描述 投票:0回答:4

我遇到了一个非常奇怪的问题。我们正在将一个应用程序投入生产,其中一个 POST 请求正在转换为 POST,然后直接对同一 URL 发出 GET 请求,并且后端 (Laravel) 永远不会收到 POST。在 chrome 网络选项卡中,它看起来只是一个 GET,但使用 Burpsuite 我们可以看到 POST 请求。

负责的代码

async store() {
    // This prints post
    console.log(this.method());

    await this.form[this.method()]('/api/admin/users/' + (this.isUpdate() ? this.id : ''));

    if (!this.isUpdate()) {
        this.form.reset();
    }
},

form.post方法内容

return new Promise((resolve, reject) => {
    axios[requestType](url, this.data())
    .then(response => {
        this.busy = false;
        this.onSuccess(response.data);
        resolve(response.data);
    })
    .catch(error => {
        this.busy = false;
        if (error.response.status == 400) {
            return this.displayErrors(error.response.data)
        }
        this.onFail(error.response.data.errors);
        reject(error.response.data);
    });
});
laravel post get xmlhttprequest axios
4个回答
46
投票

这个问题我也在Larachat slack论坛上回答过,为了其他人的缘故,这里是下一个有这样问题的答案。

只是一个小背景故事。在聊天中我们发现它收到了 301 错误,这是一个重定向错误。 我最近在发布到临时服务器上的网址时遇到了同样的错误,它在本地工作正常,但在临时服务器上却不起作用。

问题似乎是帖子网址末尾的斜线。

所以发帖到

https://example.com/post/to/
是行不通的。

删除

/
并发布到
https://example.com/post/to
即可。


0
投票

仅供参考,我也遇到了同样的事情 - axios 请求被重定向。但对我来说,结果是一些本地化中间件导致了重定向!

我在 Api 路由文件中设置了一条替代路由(同样是问题中的 Laravel),绕过该中间件(可能是路由最初应该去的地方!)。现在一切都好啦!我猜是小学生的错误!


0
投票

我确认之前的答案。从本地到生产环境,我也遇到了同样的问题。

对像

/ api / user / store /
这样的端点的调用可能会重定向到带有 301 状态代码的
/ api / user / store
,并且此调用被解释为显然我们无法到达的 GET(因为它不在我们的路由列表中)。所以这不起作用。

解决方案可以是在 Apache 配置上工作(修剪最后一个斜杠),但我更喜欢调整我的 Axios 调用。


0
投票

我也收到了这个,问题与 url 配置无关。我所做的是显式创建 axios POST 有效负载并且它正常工作。我从邮递员那里拿了它,它按预期工作了。

let config = {
    method: 'post',
    maxBodyLength: Infinity,
    url: 'https://my.normalurl.com/api/v2',
    headers: { 
      'Content-Type': 'application/json', 
      'Authorization': 'Session ' + token
    },
    data : data
  };
  
  axios.request(config)
© www.soinside.com 2019 - 2024. All rights reserved.