上一篇文章写了关于 前端js css文件报错net::ERR_SSL_PROTOCOL_ERROR 的问题。
问题:nginx可以连接,但是无法加载页面
可以进入html页面,但是在请求资源的时候会自动将http转为https,导致页面无法正常链接nginx,无法加载页面;
一开始以为是nginx写的有问题,去验证了其他项目,都正常,所以排除这种可能,下面感觉是不是依赖除了问题,删掉重新装,也没有用,然后我运行了本地其他项目,看到加载资源的时候就是http,而新项目会转为https,这就是一个突破口,越想越觉得可能是这个问题,自行百度,就找到了解决方案
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
这个是写在入口文件中的,作用经查询说是会自动将域名的http转为https,看一下官方的解释吧:
也就是说在请求头加一个这个设置,浏览器会自动转为一个https的状态,知道了这个原因,就在html中去掉了这部分代码,项目就正常运行了。
附:
浏览器的请求头出现的
upgrade-insecure-requests:1
这行代码表示能读懂服务器发过来的上面这条信息,并且在以后发请求的时候不用http而用https。
而,
Content-Security-Policy:upgrade-insecure-requests
是对应服务器响应头的。该指令用于让浏览器自动升级请求从http到https,用于大量包含http资源的http
网页直接升级到https而不会报错.简洁的来讲,就相当于在http和https之间起的一个过渡作用.
比如:
如果在https网页中跨域(已使用CORS解决)载入一个http的资源,那么它会将所有连接强制以https或wss等SSL加密形式发送请求,这样如果资源不支持https等SSL加密,那么该资源就不会被载入
所以,尽量使用nginx代理本地运行项目,和线上尽量保持一致
注意html头部的这个引入:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">