type
status
date
summary
slug
tags
category
password
URL
icon
背景
有一个场景,需要前端在HTTPS环境下请求HTTP环境,正常情况下,HTTP请求会被浏览器拦截,并提示
那我们如果确实需要在HTTPS场景下调用HTTP接口,那应该怎么办呢?查询了与混合内容(Mixed Content)有关的w3c规范,发现并不是所有的HTTP请求都会被拦截的,有以下两大类情况我们可以正常的发起HTTP请求。
W3C有关混合内容的规定
一、可升级的内容
简单翻译以下就是针对image、video、audio这三种资源,他们即使是HTTP协议,由于与其他类型的资源相比,它们的危险性更小,所以我们可以认为它们是安全的,浏览器不会阻止这类请求。
二、阻塞的内容
除了image、video、audio这三种资源外,其他类型的HTTP请求都会被阻塞。但是,W3C还有一种算法策略判断当前URL是否是潜在可信的URL,如果是的话,也可以直接使用HTTP通信。
三、潜在可信的URL判定策略
中文总结如下:
- 如果源是不透明的:如果给定的源是一个不透明源,算法直接返回“不信任”。
- 源为元组源时的检查:
- 如果源的协议是“https”或“wss”,返回“潜在信任”。这与“事先认证的URL”概念相对应。
- 如果源的主机地址符合CIDR表示法127.0.0.0/8或::1/128,返回“潜在信任”。
- 如果用户代理符合名称解析规则,并且源的主机是“localhost”、以“.localhost”结尾、是“localhost.”或以“.localhost.”结尾,那么返回“潜在信任”。
- 特殊协议或配置的处理:
- 如果源的协议是“file”,返回“潜在信任”。
- 如果源的协议被用户代理视为已认证的协议,返回“潜在信任”。
- 如果源已被配置为可信的源,返回“潜在信任”。
- 默认结果:
- 如果以上条件都不满足,返回“不信任”。
总结
在HTTPS环境下,浏览器并不会拦截所有HTTP请求。根据W3C的混合内容规定,对于image、video、audio这三种资源,即使是HTTP协议,由于它们的危险性相对较小,浏览器不会阻止这类请求。除此之外,如果URL被判定为潜在可信的URL,那么也不会被拦截。
参考资料:
有任何问题或者疑问,欢迎发邮件联系。