Laravel 如何解决跨域请求被阻止

Posted

技术标签:

【中文标题】Laravel 如何解决跨域请求被阻止【英文标题】:Laravel How to solve Cross-Origin Request Blocked 【发布时间】:2020-09-30 11:29:45 【问题描述】:

我想通过 api 读取一个 pdf 文件,但它给了我这个错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

我尝试 Ammar 回答后,错误消息变为

Access to fetch the resource from origin has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

这是我的 cors.php

<?php

return [

    'paths' => ['api/*'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'Access-Control-Allow-Origin'=> '*',

    'Access-Control-Allow-Headers'=> 'Origin, Content-Type',

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => false,

    'max_age' => false,

    'supports_credentials' => false,

];

如何解决这个错误?

【问题讨论】:

你在内核中做了protected $middleware = [ \Fruitcake\Cors\HandleCors::class,];吗? 是的,这是第一个 【参考方案1】:

我认为 PDF 文件位于 public 文件夹中。 所以你需要改变这一行:

    'paths' => ['api/*'],

变成这样:

    'paths' => ['*'],

因为公用文件夹路径没有api前缀组前缀。

如果这不起作用。也许 laravel 没有将 CORS 相关的 HTTP 标头应用于文件的响应。所以需要配置Apache或者nginx。看看这个问题:

https://github.com/fruitcake/laravel-cors/issues/163


更新

尝试将此配置添加到您的网络服务器:

<Directory /path/to/your/public/folder/>
        Header set Access-Control-Allow-Origin "*"
</Directory>

【讨论】:

非常感谢,我现在就试试。但是,如果我改变它,那将是“*”,这将被视为一种享受,或者可以让它暴露一切。 如果你只使用 laravel 来创建 API,这不是一种享受。但是,如果您有一个在同一个 laravel 实例上运行的普通 Web 应用程序,则不建议这样做。在这种情况下,配置网络服务器是实现这一目标的更好方法。 我在同一个 laravel 项目中有管理面板 它不起作用它返回一条新消息,我将使用新错误更新问题 我应该把它放在什么文件中

以上是关于Laravel 如何解决跨域请求被阻止的主要内容,如果未能解决你的问题,请参考以下文章

如何解决跨域问题

Angular 5,httpclient,跨域请求被阻止

如何解决此问题:跨域读取阻塞 (CORB) 阻止了跨域响应

跨域请求被阻止:同源策略不允许在 http://........ 读取远程资源

解决Ajax不能跨域的方法

跨域请求被阻止:同源策略不允许在 https://localhost:3000/ 读取远程资源 [重复]