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

Posted

技术标签:

【中文标题】Axios/XMLHttpRequest 在生产环境中发送 GET 而不是 POST【英文标题】:Axios/XMLHttpRequest is sending GET instead of POST in production environment 【发布时间】:2018-04-22 20:04:12 【问题描述】:

我遇到了一个非常奇怪的问题。我们正在将一个应用程序投入生产,其中一个 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);
    );
);

【问题讨论】:

您很可能遇到了 301/302 重定向。例如,如果您的生产服务器尝试将所有 http 流量重定向到 https,则到 http 的任何 POST 都将被重定向到 https,但会变成 GET 请求。您可以查看this answer 以获得稍长的解释。 可能重复:axios.post is sending a GET request 【参考方案1】:

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

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

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

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

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

【讨论】:

我不知道为什么,但就我而言,我不得不做相反的事情! 好指点,谢谢!原来我正在发布到非 i18n 端点,这导致后端重定向到本地化 url。这导致 post-request 最终成为 get-request。 我遇到了完全相同的问题,本地服务器工作正常,只是暂存或生产服务器不行。这就是原因。谢谢! 你救了我一次采访!我欠你一个。 非常感谢......在我的情况下,我的端点是 http 而不是 https,所以它被重定向并获得 301 状态。那种面面相觑的时刻,但修复错误感觉很好【参考方案2】:

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

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

【讨论】:

你能告诉我你是如何在 axios 中修复它的吗?谢谢 @SakhiMansoor - 我的在 Axios 中没有修复 - 对我来说,这是一些将 POST 重定向为 GET 的中间件【参考方案3】:

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

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

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

【讨论】:

以上是关于Axios/XMLHttpRequest 在生产环境中发送 GET 而不是 POST的主要内容,如果未能解决你的问题,请参考以下文章

DPDK — RING(librte_ring,Ring Manager,环缓冲区管理组件)

智能环控:养猪从简单的风机温控,到视频识别的智能控制

电器ERP行业案例——环力科技

react区分不同生产环境

生产环境部署部署项目到生产环境Linux下

Docker---docker生产环境之TLS通讯加密