网页访问报错This request has been blocked; the content must be served over HTTPS.

  • Post author:
  • Post category:其他

最近搭建服务器,在阿里云上申请了免费Symantec SSL证书(赛门铁克)。安装好证书之后,访问项目时项目样式布局和各项功能均不正常,用谷歌浏览器F12查看时,发现报This request has been blocked; the content must be served over HTTPS.错误,全是CSS和JS文件被拦截了。真是纳闷了。之前我的SSL证书是用letsencrypt+tomcat的方式部署的,一点问题都没有。如今使用nginx+Symantec SSL方式部署出现这样的问题,有点头大。无招只能寻求度娘,才了解到:

HTTPS页面里动态的引入HTTP资源,比如引入一个js或css文件,会被直接block掉的.在HTTPS页面里通过AJAX的方式请求HTTP资源,也会被直接block掉的。

那么解决方案就是把页面中涉及到http引入改为https,有一种比较快捷的方式是在页面的<head>标签上面加上下面的代码:

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

意思是自动将http的不安全请求升级为https,改好后保存重新运行,发现页面加载很久才出来,样式效果依旧没出现,查看控制台,报了另一种错误:

原来我的页面是用jsp写的,页面中的路径都是以 <%=basePath%>开头写成绝对路径,而<%=basePath%>最终解释成页面也是以http开头,而之前已经转成https了,这时就产生冲突了,提示文件找不到了,解决办法就是将页面中涉及到<%=basePath%>改成 ./(即一个实心圆点加一个左斜杠)即可。


版权声明:本文为shenxiaomo1688原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。