Fruitcake / laravel-cors 拒绝 PDF 文件

cha*_*ila 2 php cors laravel

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

\n

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

\n

CORS 标头 \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 缺失

\n

这是我的 cors.php:

\n
<?php\n\nreturn [\n\n    \'paths\' => [\'*\'],\n\n    \'allowed_methods\' => [\'*\'],\n\n    \'allowed_origins\' => [\'*\'],\n\n    \'allowed_origins_patterns\' => [],\n\n    \'allowed_headers\' => [\'*\'],\n\n    \'exposed_headers\' => [],\n\n    \'max_age\' => 0,\n\n    \'supports_credentials\' => false,\n\n];\n\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的 kernel.php:

\n
protected $middleware = [\n        \\Fruitcake\\Cors\\HandleCors::class,\n        ...\n];\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n

引导程序.php

\n
<?php\n\nheader(\'Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS\');\nheader(\'Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token, Authorization, Accept,charset,boundary,Content-Length\');\nheader(\'Access-Control-Allow-Origin: *\');\n
Run Code Online (Sandbox Code Playgroud)\n
\n

编辑

\n

错误

\n

附加的 http 请求\n图像

\n

Yah*_*din 9

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

如果您使用 Apache,请查看public/.htaccess它包含的内容:

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [END]
Run Code Online (Sandbox Code Playgroud)

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

location / {
   try_files $uri $uri/ /index.php?$query_string;
}
Run Code Online (Sandbox Code Playgroud)

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

您有几个选择:

方法一:调整服务器配置

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

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

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

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

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

现在 CORS 中间件应该运行。