所以我在Laravel中构建了一个表单并在外部进行托管,但是我想在HTML页面中显示它,但是我遇到了X-Frame-Options的问题.
确切的错误消息是:
Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
我在之前的StackOverflow答案中看到这是由于FrameGuard中间件,但此后已被删除,并且代码的发行行不在该文件中.
Laravel版本5.3.
我还尝试使用没有结果的地板在Nginx配置文件中设置X-Frame-Options:
sed -i 's/http\ {/http\ {\nadd_header X-Frame-Options SAMEORIGIN, false;\n\n/' /etc/nginx/nginx.conf
此错误发生在多个浏览器中,经过测试:Chrome和Safari
就我而言,nginx是阻止访问的人.
跑:
grep -ri "X-Frame-Options" /etc/nginx
并检查输出:
/etc/nginx/snippets/ssl-params.conf:add_header X-Frame-Options DENY;
将DENY替换为SAMEORIGIN后,一切都按预期开始工作.
将标题设置为从框架到
X-Frame-Options: ALLOW-FROM https://example.com/
其中example.com是请求表单的域。
您可以在laravel中使用中间件来做到这一点。
生成一个新的中间件。
php artisan make:middleware FrameHeadersMiddleware
然后在刚创建的中间件的handle函数中执行以下操作:
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 ];
或如果只想将其添加到特定路由,则添加到中间件组阵列之一。