Ajax POST 到 Laravel API 偶尔会被 CORS 阻止
Posted
技术标签:
【中文标题】Ajax POST 到 Laravel API 偶尔会被 CORS 阻止【英文标题】:Ajax POST to Laravel API occasionally blocked by CORS 【发布时间】:2020-01-02 06:43:07 【问题描述】:对我的 Laravel api 的 Ajax POST 调用被 CORS 策略阻止,但只有 5 次中的 1 次。
POST 调用每次都被 CORS 阻止,然后我添加了提供访问控制标头的中间件(下面的代码)。现在奇怪的是时不时被屏蔽。
js调用:
$.post('https://myapi.com/api/posters', somedata: 1, function(data)
console.log(data);
);
中间件:
public function handle($request, Closure $next)
header("Access-Control-Allow-Origin: *");
$headers = [
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE',
'Access-Control-Allow-Headers' => 'Content-Type, X-Auth-Token, Origin'
];
$response = $next($request);
foreach($headers as $key => $value)
$response->header($key, $value);
return $response;
注意:js 应用在 laravel 应用之外。 错误信息:
Access to XMLHttpRequest has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
【问题讨论】:
在 Laravel 中为这个特定的 API 添加一个 CSRF 令牌异常可能会帮助你摆脱它。 我在 VerifyCsrfToken 中间件中添加了 $expect 数组的 API 路径,但问题还没有解决 关注此讨论,您可能会找到答案。 laracasts.com/discuss/channels/general-discussion/… 失败的时候,响应的HTTP状态码是什么?您可以使用浏览器开发工具中的网络窗格进行检查。是 4xx 还是 5xx 错误而不是 200 OK 成功响应? 【参考方案1】:你可以使用下面的包在 Laravel 中处理 CORS
https://github.com/barryvdh/laravel-cors
【讨论】:
以上是关于Ajax POST 到 Laravel API 偶尔会被 CORS 阻止的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 post 方法将数据从 ajax 传递到 laravel 5.2 控制器
使用 Laravel 将 jQuery Ajax POST 请求作为 GET 发送