php - Laravel 拒绝在 iFrame 中显示为 "' X-Frame-Options' to 'SAMEORIGIN'。”

标签 php laravel iframe laravel-5 x-frame-options

所以我在 Laravel 中构建了一个表单并在外部托管,但我想在 HTML 页面中显示它,但 X-Frame-Options 有问题。

准确的错误信息是:

Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

我在之前的 StackOverflow 回答中看到这是由于 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

最佳答案

在框架的响应上设置标题

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
];

或者如果您只想将它​​添加到特定路由,则添加到中间件组数组之一。

关于php - Laravel 拒绝在 iFrame 中显示为 "' X-Frame-Options' to 'SAMEORIGIN'。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41771125/

相关文章:

php - 如何使用 Imagick::steganoImage() 恢复水印设置

laravel - Vue.JS 不将数据更新到嵌套组件中

javascript - 如果网页是 example.com 网站上的 iframe,它会显示一些数据而不是整页

javascript - IFrame:在 Chrome 上运行 Iframe 但想要保留 IE 设置

PHP Swift 邮件程序 : Failed to authenticate on SMTP using 2 possible authenticators

php - 保护对 PHP API 的访问

php - Laravel 重复延迟工作

php - Laravel 5 : Send a response first, 然后在 Controller 中处理请求

javascript - 在 iframe 中显示来自外部页面的具有特定 ID 的 div

php - 如何避免PDO准备语句中的转义字符 "\"?