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 8 中使用 API 路由时返回错误

Laravel 5.6 上的 Ajax 身份验证重定向

使用 Laravel 将 jQuery Ajax POST 请求作为 GET 发送

PHP Laravel 4.2 ajax post返回null或空

Laravel 5:Ajax Post 500(内部服务器错误)错误