解决在HTTPS页面里嵌套HTTP页面浏览器block的问题
问题描述:
浏览器默认是不允许在HTTPS里面引用HTTP页面的,ie下面会弹出提示框提示是否显示不安全的内容,一般都会弹出提示框,用户确认后才会继续加载,但是chrome下面直接被block掉,只在控制台打出信息。
在写网站的时候,自己的网站要嵌入别的网站,用iframe嵌入部分内容,当我把网站升级成https后,发现用iframe嵌http页面内容显示不出来,chrome控制台打出不安全的信息。
解决思路:
谷歌上不去不知道有没有更好的解决办法,反正百度里没找到。大致说下思路,https里嵌不了http页面,那就嵌https页面好了,但是别人网站是http的,很多时候你是没办法要求别人的网站要做成https来配合你的,那么,我干脆起一台Apache服务器,配成https的,指定一个子域名,然后利用Apache的代理,将https代理到http的url。(当然,前提条件是你的服务器不是Apache,如果是Apache就简单了)。这里注意,我们另外起的Apache跟我们原来的服务器没有任何关系,Apache只用来处理http这种情况。(之前我有个误区,是在自己的服务器前面套个Apache,也可以实现,但或许会有漏洞,还是并行处理更为科学);
具体做法:
这里假设我们自己的网站url是https://example.com/a.html,我们要嵌入的url是http://www.123.com/details.html。
先下载Apache,因为要配https,要带ssl模块,网上找带ssl的msi安装包找一半天没找到(哪哥们美女找到请跟我说一下),这里提供一个下载教程http://jingyan.baidu.com/article/29697b912f6539ab20de3cf8.html,写得还挺详细的。这里我直接贴我的下载地址,http://www.apachehaus.com/cgi-bin/download.plx?dli=UVVMPFWaNFjTEp0KaJTNZBlVOpkVFVFdNdkUrR1d 64位的,我在server2008上测试的。下载完是一个包,httpd-2.2.29-x64-r3.zip,解压Apache22文件夹,这是整个程序文件夹,放在你自己想放得地方,这个是自己带了ssl的,不需要单独加模块,然后我们开始配置。
1,先装Apache服务,dos命令bin目录下,如果出现拒绝访问的情况,windows附件里命令提示符右键管理员身份运行,win7下或许会出现这样的问题。httpd.exe –k install,安装成功会提示成功。然后httpd.exe 开启服务,开不了找原因,试试在服务里去开,win+R services.msc这里要注意,这个版本的Apache默认加载ssl模块,默认端口是443,如果端口被占用了,要改端口。查看端口是否被占用,这里提供几个dos命令:a.查看所有的端口占用情况netstat -ano;b.查看指定端口的占用情况netstat -aon|findstr "443"找到PID比如2016;c.找到对应的程序tasklist|findstr "2016"。改Apache https端口:config/extra/httpd-ssl.conf,要改的地方很简单,找到443,这里我改成445,我们主网站用的443,改成你的端口,改完配置别忘了重启。
2,配https,这里应该是最麻烦的事了,配好后,访问https://127.0.0.1:445会出现风险什么的,查看https那里的叉,这是Apache默认测试的证书
(截图太多貌似发布不了,点开证书信息应该是说颁发给Apache Haus什么的),好这里开始配证书,conf/httpd.conf,打开,最下面, ,
就是这个地方,狠坑了我一把,也是参照网上配的,但是不管怎么配证书就是不对,后来猜想这里可能有问题,果然猫腻在这里。这里改成httpd-ssl.conf 这个配置,我是在这个里面配的。现在到conf/extra下面,你可以看到httpd-ssl.conf,核心的配置在这里
(是不是要监听443端口,改成445),
(同上),
证书和私钥,这里改成你自己的就可以了,记住要放在ssl文件夹里。
3,重启Apache,开启服务就应该有这个,右下角,没有在bin目录下打开ApacheMonitor.exe
4,好了,前几步没问题,现在访问https://example.com:445/应该就是Apache默认的页面,现在我们利用Apache的反向代理做url映射,httpd.conf里找到这两行,把前面的#号去掉,然后在最底下加两行
ProxyPass /proxy/ http://www.123.com/details.html
ProxyPassReverse /proxy / http://www.123.com/details.html
然后重启Apache,上面两句话的意思是你访问https://example.com:445/proxy/将代理到http://www.123.com/details.html,所以当你要在地址上带后缀的时候,就体现出了价值,比如产品有产品号什么的,https://example.com:445/proxy/?id=340实际上访问的是http://www.123.com/details.html?id=340,这样就能得到不同的产品详情。
5,没什么问题这样就解决了https嵌http不安全的问题。这里讲讲跨域的问题,
URL | 说明 | 允许通信 |
http://www.a.com/a.js |
同一域名下 | 允许 |
http://www.a.com/lab/a.js |
同一域名下不同文件夹 | 允许 |
http://www.a.com:8000/a.js |
同一域名,不同端口 | 不允许 |
http://www.a.com/a.js |
同一域名,不同协议 | 不允许 |
http://www.a.com/a.js |
域名和域名对应ip | 不允许 |
http://www.a.com/a.js |
主域相同,子域不同 | 不允许 |
http://www.a.com/a.js |
同一域名,不同二级域名(同上) | 不允许 |
http://www.a.com/a.js |
不同域名 | 不允许 |
实际上,我们这里端口并不一样,还是属于跨域,但是问题的初衷是https里面不能嵌套http,所以,如果https里面嵌套的https页面跨域了,也是没有问题的。
总结:
这坑爹的问题,之前完全没发现,等到上线的时候发现不行了,我去,当时真是无语死了,也没有解决办法,现在写出来吧,如果有人遇到同样的问题了,希望能帮你解决这个问题,知识要共享。这个不涉及代码的问题,整个就是配置配置,另外给大家贴个讲Apache的网站,Apache真心不错,好使http://www.php100.com/manual/apache2/mod/mod_proxy.html
解决在HTTPS页面里嵌套HTTP页面浏览器block的问题的更多相关文章
- 关于https域名下的页面iframe嵌套http页面的问题
业务场景:在一个https域名下用iframe嵌套一个http域名的页面,会直接报错的,报错信息如下: 这段话的意思是:http域名的页面是通过https域名页面加载的,在一个安全的页面不允许加载一个 ...
- https http 混合访问_https 页面中引入 http 资源的解决方式
解决android 5.0 webview不能加载http与https混合内容的问题 在使用WebView加载https资源文件时,如果认证证书不被Android认可,那么会出现无法成功加载对应资源问 ...
- 移动端web页面列表类上拉加载,查看详情,iframe嵌套第三方页面遇到的问题以及解决办法
1.移动端上拉加载 网上有很多成熟的插件,比如iscroll.在这里介绍一下用jquery和js写的上拉加载方法.使用原生的去写上拉加载更多需要三个高度去做对比,以新闻类列表举例,首先需要整个dom的 ...
- jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行?
jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行? 因为在解析时最新解析的就是JA ...
- 母版页改变被嵌套的页面中的控件ID的解决方法
使用过模板页的朋友都会很纳闷,怎么页面的用js通过getElementById(“id”):找不到对象.查看了页面源代码才发现,原来控件的ID变了,这是母版页导致的.因为母版页怕母版页本身页面中的控件 ...
- winform窗体嵌套HTML页面,开发出炫彩桌面程序
一:CEF全称Chromium Embedded Framework,是一个基于Google Chromium 的开源项目.Google Chromium项目主要是为Google Chrome应用开发 ...
- 页面中嵌套iframe,微信浏览器长按二维码识别不了
问题:在微信浏览器内,页面中嵌套iframe,iframe中用户触发事件后有个弹框会显示二维码,用户长按二维码可以识别并跳转.尝试了一下,安卓是正常的,但是ios是识别不了的. 解决过程: 1.这里客 ...
- 微信小程序web-view(webview) 嵌套H5页面 唤起微信支付的实现方案
场景:小程序页面有一个web-view组件,组件嵌套的H5页面,要唤起微信支付. 先讲一下我的项目,首先我是自己开发的一个H5触屏版的商城系统,里面含有购物车,订单支付等功能.然后刚开始,我们公众号里 ...
- https的页面内嵌入http页面报错的问题
1.https的页面内嵌入http页面报错 在HTTPS的页面上嵌入http的页面时,浏览器会直接报错.比如在HTTPS页面上用 iframe 直接嵌入一个 http 页面,比如我们可以在百度上直接嵌 ...
随机推荐
- Java基础知识强化之集合框架笔记74:各种集合常见功能 和 遍历方式总结
1. Collection add() remove() contains() iterator() size() 遍历: 增强for 迭代器 |--List get() 遍历: 普通for |--S ...
- 使用Netty进行Android与Server端通信实现文字发送接收与图片上传
ANOTHER TITLE: Let’s use netty to achieve text send and receive and image transfer to server based ...
- 解决 kindle 书籍字体颜色偏淡问题的方法
现象 通过Markdown转换而来的mobi格式书籍都有一个大问题:字体偏淡,放在kindle上看对比度很差. 原因分析: 导致这种问题的原因,可能是因为在制作电子书的过程中,这些内容是被标注了彩色或 ...
- Ubuntu GNOME 安装日语输入法(收集)
原网址是:code.duffy.jp/add-japanese-input-to-gnome/ 1)在终端(Ctrl + Alt + t)输入:sudo apt-get install ibus-an ...
- IE下onchange事件不立即执行
做前端开发免不了为浏览器的兼容而劳神,所以坚持把发现的浏览器兼容问题做做总结,是很有意义的. 比如IE8及以下的浏览器的onchange事件实在该控件失去焦点之后才执行的,也就是要点一下空白的地方,才 ...
- pop动画大全 只能时代程序员更应该关心效果而不是冷冰冰的代码
下载地址 https://pan.baidu.com/s/1o8pQWau
- oc for in 的时候nsscanner: nil string argument
今天偶然发现,oc for in 动态的给一数组加东西,然后嵌套for in 会报nsscanner: nil string argument. 换成for循环就好了,暂时还没找到原因
- WPF TreeView递归遍历相关方法
/// <summary> /// 递归改变组织树选中状态. /// </summary> /// <param name="org">< ...
- 不同浏览器下css 透明度的写法
filter:alpha(opacity=90); /* IE transparent */ -moz-opacity:0.9; /* Moz + FF transparent */ opacity: ...
- Mysql笔记【4】-查询操作
1.查询所有列数据 select * from 表名 一般情况下,除非使用表中所有字段,最好不要使用通配符 "*",如果不知道所需要的列名,可以使用*查询获取 2.带in关键字的查 ...