近日碰到web开发的跨域问题,甚为恼火,网上找了很多资料,但很多都大同小异,没有解决问题。幸运的是,无意中看到了“沃通”,最后在沃通技术支持的帮助下,圆满解决了问题,在这里我要给这位技术支持点赞!
废话不多说,直接进入正题!
问题:https与http的嵌套问题
在caspio(一个应开发平台,不区分前后台)的https页面中用iframe嵌套我自己的一个web应用,开始我的应用是使用 http 访问,结果在IE中打开时,浏览器会提示页面中包含不安全的内容,只有在点击“显示全部内容”后才能看到iframe中我的应用;而在chrome中,完 全没显示,只在后台console中显示错误。
解决方案:
首先,必须明白一点,要想好的用户体验,就必须避免不同站点的https与http的嵌套问题,那么,解决办法就是将http的站点部署为 https的,前提是这个http的站点你是可以完全控制的,因为你需要修改其服务器配置。以下就是针对Apache配置https的过程。Apache 使用的是phpstudy的集成开发环境。
https =http+SSL
第一步,准备SSL证书。
如果你不想掏钱,你可以去沃通官网() 申请免费的沃通提供的免费SSL证书,使用时长是一年。申请过程就不说了,很清楚,注意一点就是注意保管好证书安装密码,并且注册的域名要和你的网站的域 名保持一致。注册完后,系统会返回一封邮件发邮件,有一个是客户端SSL证书,一个是服务器SSL证书,显然我们需要服务器端证书,(如果没有收到可以问 客服)。服务器端证书是一个以你域名命名的压缩包,其中对应各种不同服务器,楼主此处选的是for Apache.zip。该压缩包中包括三个文件,私钥,公钥和证书。
1_root_bundle.crt
2_www.test.com.crt
3_www.test.com.key
然后,将这三个文件放入你的Apache的conf目录下即可。
第二步,配置Apache
1.打开Apache的配置文件httpd.conf,去掉下面一项前面的注释符 #
#LoadModule ssl_module modules/mod_ssl.so
2.配置https接口
(这里我们不用#Include conf/extra/httpd-ssl.conf ,直接在httpd.conf文件中配置)
在httpd.conf文件的末尾添加如下代码
###################################################################
#https的访问端口
Listen 443
<VirtualHost *:443> SSLEngine on#Apache的web项目虚拟目录,与前面保持一致
DocumentRoot "C:\inetpub\wwwroot"
ServerName www.seevin.com
#此处对应的就是前面公钥、私钥和证书
SSLCertificateFile "C:\Program Files\phpStudy\Apache\conf\2_www.seevin.com.crt" SSLCertificateKeyFile "C:\Program Files\phpStudy\Apache\conf\3_www.seevin.com.key" SSLCertificateChainFile "C:\Program Files\phpStudy\Apache\conf\1_root_bundle.crt"</VirtualHost>
###################################################################
OK,配置完成,重启Apache,即可使用Https访问你注册的域名。
楼主配置中遇到的问题,也是让那位技术支持纠结了好久的问题:就是后面公钥、私钥和证书的目录问题导致Apache无法启动,建议使用绝对目录,相对目录可能会有问题。
另一个造成无法启动Apache的问题,443端口已被占用,此时可以选则别的端口。