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