【问题标题】:fruitcake / laravel-cors is rejecting PDF filesfruitcake / laravel-cors 拒绝 PDF 文件
【发布时间】:2021-07-11 15:26:58
【问题描述】:

我在公共目录下有 PDF 文件。我可以通过访问浏览器上的链接来访问它们,它工作正常。

但是,当我尝试将 PDF 文档嵌入 FranckFreiburger/vue-pdf 时,我得到:

缺少 CORS 标头“Access-Control-Allow-Origin”

这是我的 cors.php:

<?php

return [

    'paths' => ['*'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => false,

];

这是我的 kernel.php:

protected $middleware = [
        \Fruitcake\Cors\HandleCors::class,
        ...
];

我也尝试过删除整个包并像这样使用普通的 php,但它仍然无法正常工作:

bootstrap.php

<?php

header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token, Authorization, Accept,charset,boundary,Content-Length');
header('Access-Control-Allow-Origin: *');

编辑

附加的http请求

【问题讨论】:

  • 真的和VueJS有关吗?
  • 我认为来自Vue 社区的人可能会涉及到..
  • 不想粗鲁。只是询问 CORS 问题是否与此 Vue 包有关。 IMO,这只是一个后端问题。如果您觉得合适,请随时在此处留下vue 标签。 :)
  • 可能与包向服务器发出请求的方式有关。我添加它是因为我不知道是什么导致了错误..
  • CORS 通常 99% 是由后端引起的。您可以通过在您的 devtools 网络选项卡中查看包发送的有效负载来仔细检查。

标签: php laravel cors


【解决方案1】:

就我而言,我点击Yahya Uddin answer 中的链接获取Apache Cors configuration,我唯一需要的是使用此命令启用 Mod_Headers

a2enmod headers

然后重启apache

【讨论】:

    【解决方案2】:

    CORS 不起作用的原因是因为您的 PHP 代码甚至都没有为静态文件运行。

    如果您使用的是 Apache,请查看其中包含的 public/.htaccess

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [END]
    

    如果你继续使用 Nginx,查看位于 /etc/nginx/sites-available 的配置,它应该包含:

    location / {
       try_files $uri $uri/ /index.php?$query_string;
    }
    

    无论哪种情况,以上基本上意味着如果请求不是public中的目录或文件,则运行index.php中的脚本。

    你有几个选择:

    方法一:调整服务器配置

    您可以修改您的服务器配置,为某些或所有静态文件启用 CORS:

    方法二:通过应用提供文件

    1. 将文件移动到存储中的某个位置
    2. 创建一个新的路由和控制器,如下所示:
    Route::get('files/my-example-file.pdf', function () {
        return response()->file($path);
    });
    

    记住路径应该是绝对的,比如'/home/vagrant/code/my-project/storage/app/sample.pdf

    还记得以某种方式(例如通过中间件组)将 CORS 中间件应用于路由。

    现在 CORS 中间件应该运行了。

    【讨论】:

    • 非常感谢您的回答,但是,这个项目甚至在本地主机 (php artisan serve) 上也这样做,而且我在实时服务器上使用 Nginx。
    • 然后使用第二种方法,并通过应用程序提供文件。
    • 我已经接受了答案,但我仍然有很多 ? 标记在我的脑海中......
    • 你有什么问题?
    猜你喜欢
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2016-08-13
    • 2017-01-14
    相关资源
    最近更新 更多