Laravel 5.4 + jQuery CORS 请求

Posted

技术标签:

【中文标题】Laravel 5.4 + jQuery CORS 请求【英文标题】:Laravel 5.4 + jQuery CORS Request 【发布时间】:2017-12-12 16:40:28 【问题描述】:

我有两个 laravel 应用程序,一个用作管理面板,另一个用作 API 服务器。

我正在尝试向 API 发出 jQuery AJAX Post 请求,但响应的行为似乎很奇怪。

我正在使用 barryvdh/laravel-cors 在 API 上启用 CORS。我也尝试禁用它并手动添加“选项”请求,但我仍然得到相同的行为。

问题似乎与在预检请求之后发出的请求有关。以下是它们的发送顺序(注意初始请求是 POST):

预检请求(OPTIONS - 工作正常)

对 API 端点的 GET 请求(不知道为什么这样做)。它将 302 Found 重定向返回给引用者(给客户端)

对 API 端点的 POST 请求。同样的 302 重定向回来。

对发送请求的管理 url 的 OPTIONS 请求(由于管理应用上没有 CORS 而失败)。

这是请求流程的图像: Request Flow (Chrome network panel)

我不得不提一下,我没有在控制器中进行任何重定向,也没有添加任何可以做到这一点的中间件。

【问题讨论】:

你能看一下服务器日志吗?你也打开了mod安全性。如果是这样,请查看 mod sec 日志。 日志不显示任何内容。我确实注意到问题是由 laravel 验证器引起的。但这应该会抛出 400 Bad request。 我不知道 mod sec,我在 XAMPP 下的 localhost 上运行它们。我可以检查你是否认为它是相关的。 如果只是运行 XAMPP 可能不相关。 【参考方案1】:

显然,在这种情况下,确定请求是否必须作为 JSON 响应的方法都不起作用,特别是 $request->ajax() 和 $request->wantsJSON();

我通过覆盖我的基础 ApiController 上的函数 buildFailedValidationResponse 解决了这个问题,使其始终返回 JSON 响应。

protected function buildFailedValidationResponse(Request $request, array $errors)

    return new JsonResponse($errors, 422);

【讨论】:

以上是关于Laravel 5.4 + jQuery CORS 请求的主要内容,如果未能解决你的问题,请参考以下文章

Axios CORS/Preflight 因 Laravel 5.4 API 调用而失败

在 laravel 5.4 mix 上添加 jQuery

带有 Laravel 5.4 后端的 Vuejs 2,发布(未经授权)错误

CORS问题无法解析jquery,laravel 5.2

Laravel 5.3 到 5.4 (mPdf - niklasravnsborg/laravel-pdf ) 升级问题

laravel-5.4 - 错误:从空值创建默认对象