php fruitcake / laravel-cors正在拒绝PDF文件

vcudknz3  于 2022-10-30  发布在  PHP
关注(0)|答案(3)|浏览(149)

我有PDF文件在公共目录下。我可以通过访问浏览器上的链接来访问它们,而且它工作得很好。
然而,当我尝试在FranckFreiburger/vue-pdf中嵌入PDF文档时,我得到:

CORS标头“访问控制-允许-来源”缺失

这是我的cors.php:

<?php

return [

    'paths' => ['*'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => false,

];

下面是我的内核.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请求

13z8s7eq

13z8s7eq1#

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中的脚本。
您有几个选项:

方法1:调整服务器配置

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

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

1.将文件移动到存储中的某个位置
1.创建一个新的路由和控制器,如下所示:

Route::get('files/my-example-file.pdf', function () {
    return response()->file($path);
});

请记住,路径应该是绝对路径,如'/home/vagrant/code/my-project/storage/app/sample.pdf
另外,请记住以某种方式将CORS中间件应用于路线(例如,通过中间件组)。
现在,CORS中间件应该运行。

abithluo

abithluo2#

在我的示例中,我按照Yahya Uddin answer中的链接查找Apache Cors configuration,我唯一需要做的就是使用此命令启用Mod_Headers

a2enmod headers

并重新启动Apache

wa7juj8i

wa7juj8i3#

如果您不想将文件存储在服务器上
您可以在返回PDF响应之前添加标题Access-Control-Allow-Origin
使用mpdf的示例:

$mpdf = new Mpdf();
$mpdf->WriteHTML('<h1>Test send of PDF</h1>');
header('Access-Control-Allow-Origin: *');
return $mpdf->Output("Test.pdf", Destination::INLINE);

相关问题