1 Refused to display ‘url’ in a frame because it set 'X-Frame-Options' to 'sameorigin' 怎么解决?
进在开发公司的文件中心组件,提供各个子系统的附件上传下载、预览、版本更新等功能,前端在今天突然给我发一张图,说预览缩略图遇到问题了,然后发了个截图给我:
这很明显是一个跨域问题,
X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, <iframe>或者 <object> 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。
X-Frame-Options 有三个值:
- DENY
- 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
- SAMEORIGIN
- 表示该页面可以在相同域名页面的 frame 中展示(一般默认是这种)。
- ALLOW-FROM uri
- 表示该页面可以在指定来源的 frame 中展示。
此处很明显需要在中间件里面修改一下响应头的X-Frame-Options属性,core的中间件流程如下:
所以我们需要实现一个响应头的增删集合类:
- /// <summary>
- /// 响应头的增删集合
- /// </summary>
- public class SecurityHeadersPolicy
- {
- public IDictionary<string, string> SetHeaders { get; }
- = new Dictionary<string, string>();
- public ISet<string> RemoveHeaders { get; }
- = new HashSet<string>();
- }
然后实现一个增删响应头的中间件:
- /// <summary>
- /// 中间件实现
- /// </summary>
- public class SecurityHeadersMiddleware
- {
- private readonly RequestDelegate _next;
- private readonly SecurityHeadersPolicy _policy;
- public SecurityHeadersMiddleware(RequestDelegate next, SecurityHeadersPolicy policy)
- {
- _next = next;
- _policy = policy;
- }
- public async Task Invoke(HttpContext context)
- {
- IHeaderDictionary headers = context.Response.Headers;
- foreach (var headerValuePair in _policy.SetHeaders)
- {
- headers[headerValuePair.Key] = headerValuePair.Value;
- }
- foreach (var header in _policy.RemoveHeaders)
- {
- headers.Remove(header);
- }
- await _next(context);
- }
- }
提供响应头的增删方法:
- /// <summary>
- /// 响应头的增删方法
- /// </summary>
- public class SecurityHeadersBuilder
- {
- private readonly SecurityHeadersPolicy _policy = new SecurityHeadersPolicy();
- public SecurityHeadersBuilder AddCustomHeader(string header, string value)
- {
- _policy.SetHeaders[header] = value;
- return this;
- }
- public SecurityHeadersBuilder RemoveHeader(string header)
- {
- _policy.RemoveHeaders.Add(header);
- return this;
- }
- public SecurityHeadersPolicy Build()
- {
- return _policy;
- }
- }
然后我们需要一个中间件的拓展方法:
- /// <summary>
- /// 中间件拓展方法
- /// </summary>
- public static class UseSecurityHeaders
- {
- public static IApplicationBuilder UseSecurityHeadersMiddleware(this IApplicationBuilder app, SecurityHeadersBuilder builder)
- {
- SecurityHeadersPolicy policy = builder.Build();
- return app.UseMiddleware<SecurityHeadersMiddleware>(policy);
- }
- }
然后就是在startup的Configure方法中注册我们的中间件:
- //允许iframe嵌入资源
- app.UseSecurityHeadersMiddleware(new SecurityHeadersBuilder()
- .AddCustomHeader("X-Frame-Options", "AllowAll")
- );
我在这里使用的值是“AllowAll” 而不是“ALLOW-FROM uri” 是为了方便测试,如果开发的话应该是需要进行配置的,到这里再嵌入网页即可成功。
1 Refused to display ‘url’ in a frame because it set 'X-Frame-Options' to 'sameorigin' 怎么解决?的更多相关文章
- 14、运行Django时浏览器中遇到Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'deny'
问题:Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'deny' 解决办法: 只需要在 Djagno ...
- Refused to display '[url]' in a frame because it set 'X-Frame-Options' to 'Deny'.
X-Frame-Options是一个HTTP标头(header),用来告诉浏览器这个网页是否可以放在iFrame内.例如: X-Frame-Options: DENY X-Frame-Options: ...
- linux中上传文件出现Refused to display 'http://***' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
刚开始出现这个问题,去百度了一下,网上很多答案都是一致的,但是在我这里没有解决问题.这个问题服务器没有打印日志.说明没有访问到服务器上,但是前端又没有问题,很奇怪,后面终于有一个同事和我说会不会是腾讯 ...
- odoo开发笔记 -- 跨域Refused to display in a frame because it set 'X-Frame-Options' to 'DENY'
场景描述: odoo界面嵌入iframe,Refused to display in a frame because it set 'X-Frame-Options' to 'DENY' 跨域请求失败 ...
- 区别CSS中display:box;inline;none以及HTML中 <frame> 标签<table> 标签的 frame 属性
区别display:box:display:inline:display:none三者的不同 display:block的特点是: block是Display默认的值.总是在新行上开始:该对象随后的内 ...
- 2.7.2 元素定位:frame 内定位 driver.switch_to.frame()
来源: http://blog.csdn.net/anniejunyan/article/details/23257327 Selenium + Webdriver 学习(五) frame下元素定位 ...
- url参数中出现+、空格、=、%、&、#等字符的解决办法
url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...
- Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决
Atitit.404错误解决标准流程and 错误resin4 resin chinese char path 404 err解决 1. #原因解析 1 2. #解决方式 2 3. 输出图片流... 2 ...
- 如何在一个frame中调用另一个frame中的javascript函数
1.htm <script language="javascript">function test(){alert("测试")}</scrip ...
随机推荐
- 个微信小程序云开发云函数
1. project.config.json写上云函数所在目录"cloudfunctionRoot": "cloudfunctions/",如图 2. app. ...
- wcf 错误提示
wcf 不弹出错误提示,只显示“服务器处理请求时遇到错误.有关构造有效服务请求的内容,请参阅服务帮助页”,添加以下节点可以弹出错误提示. <serviceDebug includeExcepti ...
- Mac下安装python2和python3共存
一般是python2默认安装了,python3没有安装,这时候一般使用命令:brew install python3 进行安装 这里有个基础知识要记录一下,就是不同方法安装python的路径是不一样的 ...
- BitmapShader填充图形
package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.*; imp ...
- 编译安装python3事出错:
configure: error: no acceptable C compiler found in $PATH 问题解决 解决方法: yum intall gcc -y
- Java RSA分段加密
我们通过Java进行RSA加密的时候,可能会出现如下问题: /** * 私钥加密 * * @param data 待加密数据 * @param key 密钥 * @return byte[] 加密数据 ...
- idea的enable auto-import/内存设置
设置pom.xml依赖的自动导入 设置idea的memory heap On the Help menu, click Edit Custom VM Options. Set the -Xmx opt ...
- 【POJ - 2010】Moo University - Financial Aid(优先队列)
Moo University - Financial Aid Descriptions 奶牛大学:奶大招生,从C头奶牛中招收N(N为奇数)头.它们分别得分score_i,需要资助学费aid_i.希望新 ...
- 性能优化-service进程防杀
service作为后台服务,其重要性不言而喻,但很多时候service会被杀死,从而失去了我们原本想要其发挥的作用,在这种情况下我们该如何确保我们的service不被杀死就是本节需要讨论的内容了 se ...
- linux服务器常用密令
1. 什么是linux服务器load average? Load是用来度量服务器工作量的大小,即计算机cpu任务执行队列的长度,值越大,表明包括正在运行和待运行的进程数越多.参考资料:http://e ...