手上一个项目最近刚刚切换成https协议,原有的一些请求仍旧是http的Ajax请求,发现好些正常的服务都不能运转了,排查发现Ajax请求全被浏览器block了。
原来,浏览器默认是不允许在HTTPS里面引用HTTP资源的,一般遇到这种情况chrome会在地址栏右边显示一个图标,告诉你mixed content blocked。如果在一个HTTPS页面里动态的引入HTTP资源,比如引入一个js文件或css文件,会被直接block掉的。
众所周知,xmlhttprequest因为安全问题禁止跨域名、跨协议、跨端口号的交互,在HTTPS发ajax请求更不例外,Chrome浏览器使用开发者工具查看NetWork能看到提示信息:Provisional headers are shown,一般来说,看到这个提示说明请求并没有发出去:
通过Console控制台还看到如下信息:
Mixed Content:The page at 'https://xxxxxx' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'httP://xxxxxxx'. This request has been blocked; the content must be served over HTTPS.
解决方法:
1.如果站内资源,最好通过相对路径的方式引用,或者把引用资源URL里的协议头去掉(如//www.abc.com/xxx)
2.采用相同的协议
3.请求非站内资源,可先写一个站内方法,使用curl中转请求的方式来规避
评论已关闭!