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

Axios/XMLHttpRequest is sending GET instead of POST in production environment

我 运行 遇到了一个非常奇怪的问题。我们正在将一个应用程序投入生产,其中一个 POST 请求正在变成 POST,然后直接向同一个 URL 发送 GET 请求,并且从未收到 POST在后端 (Laravel)。在 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);
    });
});

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

只是一些背景故事。在聊天中我们发现它收到了 301 错误,这是一个重定向错误。 我最近在登台服务器上 posting 到 url 时遇到了同样的错误,它在本地工作正常但在登台服务器上却不行。

问题似乎是 post url 末尾的斜线。

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

删除 / 并 post 到 https://example.com/post/to 将起作用。

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

我在 Api 路由文件中设置了一个替代路由(再次 Laravel 就像问题中一样),绕过了那个中间件(可能是路由首先应该去的地方!) .现在一切都好!我猜是男生错误!

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

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

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