https页面加载http资源的解决方案

      http协议首部字段  Content-Security-Policy csp)中的block-all-mixed-content指令在当前页面为通过https协议加载的情况下禁止通过http渠道加载任何资源,任何混合类型的资源请求都是被禁止的,包括混合活动内容和混合被动内容,这条也适用于<iframe>中的文档,确保整体页面都不包括混合内容

      https是http over secure socket layer以安全为目标的http通道,所以https的页面上不允许出现http请求如果在https的页面需要加载http的资源,浏览器会认为这是不安全的资源,将会默认阻止,导致js不加载页面出现报错,样式不加载,图片不展示等问题, 

 

https页面加载http资源解决办法:

  • 将http自动升级为https

               https页面加载http资源被称为混合内容,所以在https页面访问http资源,可以在页面的header中加入:

               <meta  http-equiv = 'Content-Security-Policy'  content = 'upgrade-insecure-requests'>

               Upgrade Insecure Requests 是用来解决让浏览器自动升级请求,upgrade-insecure-requests 指令指示客户端将该站点的所有不安全URL(通过HTTP提供的URL)视为已被替换为安全URL(通过HTTPS提供的URL),该指令适用于需要重写大量不安全的旧版URL的网站,会在block-all-mixed-content之前执行,如果前者执行成功后者就不再发挥任何作用,推荐的做法是设置二者之一,不能同时设置

 

  • 使用资源协议自适配 

               不指定具体协议,使用资源协议自适配,删除链接中的http:  如,当前为https页面,那么就是https资源,如果是http页面,那么就是http资源

               <script  src = '//cdn.xxx/xxx.min.js'></script>

 

 

  • 使用iframe嵌入到https页面

               使用iframe的方式引入http资源,如:在https里面播放视频,可以现在一个http的页面里面播放,然后将这个页面嵌入到https里面

               或者:在https页面里面通过ajax的方式请求http资源,Chrome浏览器是不允许直接ajax请求的,如果两个页面的内容可以控制的话,当前窗口可以通过iframe进行通信

               <iframe  height = 148  width = 220  src"http://xxx/xxx.mp4"  frameborder = 0  allowfullscreen></iframe>

 

 

             

 

             

 

posted @ 2022-07-06 11:44  Naynehcs  阅读(1248)  评论(0编辑  收藏  举报