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 如何解决跨域请求被阻止的主要内容,如果未能解决你的问题,请参考以下文章