所以我在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浏览器
答案 0 :(得分:7)
就我而言, nginx 是阻止访问的人。
执行命令
grep -ri "X-Frame-Options" /etc/nginx
检查输出:
/etc/nginx/snippets/ssl-params.conf:add_header X-Frame-Options DENY;
将 DENY 替换为 SAMEORIGIN 后,所有内容都按预期启动。
答案 1 :(得分:5)
将帧的响应标题设置为
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
];
如果您只想将其添加到特定路由,请转到其中一个中间件组数组。