Laravel 拒绝在 iFrame 中显示为“'X-Frame-Options' 到 'SAMEORIGIN'”。
Laravel refusing to display in iFrame as "'X-Frame-Options' to 'SAMEORIGIN'."
所以我在 Laravel 中构建了一个表单并在外部托管,但我想在 HTML 页面中显示它,但 X-Frame-Options 有问题。
确切的错误信息是:
Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
我在之前的 Whosebug 回答中看到这是由于 FrameGuard Middleware 造成的,但此后已被删除,问题代码行不在该文件中。
Laravel 版本 5.3.
我也尝试过使用 flooring 在 Nginx 配置文件中设置 X-Frame-Options,但没有结果:
sed -i 's/http\ {/http\ {\nadd_header X-Frame-Options SAMEORIGIN, false;\n\n/' /etc/nginx/nginx.conf
此错误在多个浏览器中发生,已测试:Chrome & Safari
将框架的响应设置为 header
X-Frame-Options: ALLOW-FROM https://example.com/
其中 example.com 是请求表单的域。
您可以使用 laravel 中的中间件来执行此操作。
生成一个新的中间件。
php artisan make:middleware FrameHeadersMiddleware
然后在您刚刚创建的中间件的句柄函数中执行如下操作:
namespace App\Http\Middleware;
use Closure;
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('X-Frame-Options', 'ALLOW FROM https://example.com/');
return $response;
}
然后您可以将其添加到 Kernel.php
中的中间件数组之一
protected $middleware = [
App\Http\Middleware\FrameHeadersMiddleware::class
];
或者如果您只想将它添加到特定路由,则添加到中间件组数组之一。
在我的例子中,nginx 阻止了访问。
运行:
grep -ri "X-Frame-Options" /etc/nginx
并检查输出:
/etc/nginx/snippets/ssl-params.conf:add_header X-Frame-Options DENY;
将 DENY 替换为 SAMEORIGIN 后,一切都按预期开始工作。
所以我在 Laravel 中构建了一个表单并在外部托管,但我想在 HTML 页面中显示它,但 X-Frame-Options 有问题。
确切的错误信息是:
Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
我在之前的 Whosebug 回答中看到这是由于 FrameGuard Middleware 造成的,但此后已被删除,问题代码行不在该文件中。
Laravel 版本 5.3.
我也尝试过使用 flooring 在 Nginx 配置文件中设置 X-Frame-Options,但没有结果:
sed -i 's/http\ {/http\ {\nadd_header X-Frame-Options SAMEORIGIN, false;\n\n/' /etc/nginx/nginx.conf
此错误在多个浏览器中发生,已测试:Chrome & Safari
将框架的响应设置为 header
X-Frame-Options: ALLOW-FROM https://example.com/
其中 example.com 是请求表单的域。
您可以使用 laravel 中的中间件来执行此操作。
生成一个新的中间件。
php artisan make:middleware FrameHeadersMiddleware
然后在您刚刚创建的中间件的句柄函数中执行如下操作:
namespace App\Http\Middleware;
use Closure;
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('X-Frame-Options', 'ALLOW FROM https://example.com/');
return $response;
}
然后您可以将其添加到 Kernel.php
中的中间件数组之一protected $middleware = [
App\Http\Middleware\FrameHeadersMiddleware::class
];
或者如果您只想将它添加到特定路由,则添加到中间件组数组之一。
在我的例子中,nginx 阻止了访问。
运行:
grep -ri "X-Frame-Options" /etc/nginx
并检查输出:
/etc/nginx/snippets/ssl-params.conf:add_header X-Frame-Options DENY;
将 DENY 替换为 SAMEORIGIN 后,一切都按预期开始工作。