在网站添加一条http://开头的链接的视频,发现无法播放,浏览器F12控制台网络调试发现视频请求那条加载失败,链接自动变成了https://开头的,经过排查发现浏览器请求头中出现了 upgrade-insecure-requests: 1 参数导致的。请求头中出现的 upgrade-insecure-requests: 1 是什么意思?查了一下相关的资料,感觉挺有意思,记录一下。

浏览器的请求头
upgrade-insecure-requests: 1 //把服务器发送过来的请求不用 http协议 而启用 https协议
对应服务器Web响应头如下
Content-Security-Policy "upgrade-insecure-requests;"
该指令用于让浏览器自动升级请求从http到https,用于大量包含http资源的http网页直接升级到https而不会报错.简单来讲,就相当于在http和https之间起的一个过渡作用
举个例子
<video src="http://demo/video.mp4" autoplay="autoplay"></video>
加上 upgrade-insecure-requests 响应头以后,浏览器在https协议中调用的资源就会理解为也是使用https协议的,从而不会提示不安全协议
<video src="https://demo/video.mp4" autoplay="autoplay"></video>
在https网页中请求载入一个http的资源,那么它会将所有连接强制以https加密形式发送请求,这样如果请求的资源不支持https加密,那么该资源就不会被加载,从而导致无法访问调用
总结
解决办法只有两种,要么把请求资源链接改为https加密协议可以访问的,要么就是取消Web响应头 Content-Security-Policy "upgrade-insecure-requests;" 设置

