报错 because it set 'X-Frame-Options' to 'sameorigin'.
Refused to display 'https://xxx.xxx.cn/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
解决方法:
修改页面,增加meta配置
<head>
<!-- CSP 设置 -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://yourdomain.com;">
<!-- 其他头部信息 -->
</head>
原理
在网页开发中,当你尝试在一个iframe标签内嵌入一个设置了X-Frame-Options
响应头为sameorigin
的页面时,浏览器会阻止该页面在不同源的iframe中加载。这是因为X-Frame-Options
是用于防止点击劫持(clickjacking)攻,.击的安全策略,它告诉浏览器该页面只能在同源(即协议、域名和端口号都相同)的页面中以iframe的形式展示。
解决方式:
- 更改目标页面设置:如果你对被嵌入的Java页面具有控制权,你可以考虑修改服务器端的响应头配置,移除或更改
X-Frame-Options
为允许跨域。例如,可以将其设置为ALLOW-FROM <指定源>
,但请注意,这个选项在现代浏览器中已经不被推荐使用,并且不是所有浏览器都支持。
X-Frame-Options: ALLOW-FROM https://your-allowed-origin.com
- 使用其他安全策略:若你依然需要保持一定的安全性,可以考虑采用更现代的Content Security Policy(CSP)中的
frame-ancestors
指令来替代X-Frame-Options
,并指定允许嵌入的源。
Content-Security-Policy: frame-ancestors 'self' https://your-allowed-origin.com;
修改HTTP头部或Meta标签
Content-Security-Policy (CSP) 是一种通过HTTP头部或Meta标签在网页中设置的安全策略,用于控制浏览器允许加载哪些资源。具体添加位置如下:
- HTTP Header: 在服务器端配置,将CSP规则添加到HTTP响应头中,例如在Apache、Nginx等Web服务器的配置文件里,或者在应用程序(如Node.js、PHP、Java Servlets等)中设置响应头。以下是一个在HTTP响应头中设置CSP的例子:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com; style-src 'self' https://stylesheets.com; img-src 'self' data:; object-src 'none'; base-uri 'self';
- HTML Meta 标签: 当无法通过服务器端设置时,可以在HTML文档部分使用标签来定义CSP。注意,这种方式支持的功能可能不如HTTP头部方式全面,并且某些现代浏览器可能不再支持通过meta标签设置某些CSP指令。
<head>
<!-- CSP 设置 -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trustedscripts.com;">
<!-- 其他头部信息 -->
</head>
选择哪种方式取决于你的应用架构和部署环境,通常推荐优先考虑通过HTTP头部来设置CSP以获得最佳兼容性和安全性效果。
欢迎关注公-众-号【TaonyDaily】、留言、评论,一起学习。
Don’t reinvent the wheel, library code is there to help.
文章来源:刘俊涛的博客
若有帮助到您,欢迎点赞、转发、支持,您的支持是对我坚持最好的肯定(_)