Refused to display ‘https://localhost:8080/msc/ordertype’ in a frame because it set ‘X-Frame-Options

原因:
Spring-Security 默认是设置了这个 “X-Frame-Options” 属性为DENY

解决:

一:使用xml

<http auto-config="true" use-expressions="true">
        <headers>
            <frame-options policy="SAMEORIGIN">
        </frame-options></headers>
    </http>

二:利用java代码

老版本

http
   .headers()
       .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))

版本Spring Security 4.0.2

http
   .headers()
      .frameOptions()
         .sameOrigin();

 

### 设置 `X-Options` 为 `SAMEORIGIN` 后 iframe 显示问题解决方案 当服务器响应头设置了 `X-Frame-Options: SAMEORIGIN`,意味着该页面只允许在同一域名下被嵌入到 iframe 中。如果尝试跨域嵌入,则会遇到拒绝显示的问题。 #### 方法一:调整应用的安全策略 对于 .NET 应用程序,可以通过修改 Web.config 文件或在代码中动态设置 HTTP 响应头来更改 `X-Frame-Options` 的值[^1]: ```xml <configuration> <system.webServer> <httpProtocol> <customHeaders> <!-- 移除默认的 X-Frame-Options --> <remove name="X-Frame-Options"/> <!-- 或者更改为 ALLOW-FROM 并指定特定源站 --> <add name="X-Frame-Options" value="ALLOW-FROM https://yourdomain.com/" /> </customHeaders> </httpProtocol> </system.webServer> </configuration> ``` #### 方法二:使用 Content Security Policy (CSP) 现代浏览器支持 CSP 来替代传统的 `X-Frame-Options`。可以定义更加灵活和强大的沙箱机制以及框架来源控制规则[^4]: ```csharp app.Use(async (context, next) => { context.Response.Headers.Add("Content-Security-Policy", "frame-ancestors 'self' https://allowed-domain.com;"); await next(); }); ``` 这种方法不仅限定了哪些站点能够作为父窗口加载当前页面,还提供了额外的安全保障措施。 #### 方法三:代理服务转发请求 如果无法直接改变目标网站的安全配置,在自己的服务器上搭建一个反向代理也是一个可行方案。通过这种方式可以让客户端看起来像是从同一个域名获取资源,从而绕过同源策略限制[^3]。 例如利用 Nginx 配置如下: ```nginx location /proxy { proxy_pass http://target-site; } ``` 之后就可以把原本指向外部链接的地方改成 `/proxy` 路径下的相对路径形式。 以上几种方法都可以有效解决由于设置了 `X-Frame-Options:SAMEORIGIN` 所带来的 iframe 加载失败问题。具体采用哪种方式取决于实际应用场景和技术栈的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值