解决在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 页面,比如我们可以在百度上直接嵌 ...
随机推荐
- 基于u盘安装centos6.0
本人在dell笔记本上尝试安装centos6.0,与win7形成双系统,安装过程如下: 1.使用ultraliso制作u盘启动盘,启动盘以centos6.0的映像文件为源头制作: 2.制作完成后,删除 ...
- 鸭子类型duck typing(动态)
在程序设计中,鸭子类型(duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定.这个概念的名字来源于由Ja ...
- SQL Server 2008导入、导出数据库
SQL Server 2008数据库的导入.导出和Mysql的导出还有一定的区别,刚开始的时候完全摸不到方向,利用Microsoft SQL Server Management Studio进行导入. ...
- Android开发之Handler
我们都知道应用程序开启后,安卓会开启一个主线程(UI线程),主线程管理UI控件,进行事件分发.那为什么会出现Handler呢? 例如你要是点击一个 Button ,Android会分发事件到Butto ...
- java读写csv
http://blog.csdn.net/snn1410/article/details/9278887
- Android SDK目录含义介绍
Android SDK目录的具体结构: 1.add-ons:该目录下存放第三方公司为Android平台开发的附加功能系统. 2.build-tools:编译工具.保存着一些通用工具,比如aapt.ai ...
- Java Web应用启动间隔执行的程序
Reference:<Java定时器timer.schedule在Web中间隔执行任务和定时><[Java]Timer和TimerTask详解> 做了一个Demo,完成如下的功 ...
- jenkins(二)项目构建
通过上一篇“jenkins(一)集成环境搭建示例”,已经完成了jenkins的安装,基本配置,启动,下面继续小结jenkins使用 一.jenkins系统配置 访问jenkins,点击系统管理-> ...
- AVAudioSession 的 AVAudioSessionCategory 和 AVAudioSessionCategoryOptions 相关
AVAudioSessionCategory相关 AVAudioSessionCategoryAmbient 使用这个category的应用会随着静音键和屏幕关闭而静音.并且不会中止其它应用播放声音, ...
- javascript BOM对象 第15节
<html> <head> <title>浏览器对象</title> <script type="text/javascript&quo ...