您的位置:首页 > 运维架构 > Nginx

遇到问题--jsp---Nginx转发https导致静态资源无法加载--This request has been blocked

2018-11-22 15:41 2051 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q383965374/article/details/84341288

转发请注明出处:遇到问题–jsp—Nginx转发https导致静态资源无法加载–This request has been blocked

遇到问题

使用nginx作转发,强制tomcat部署的web项目使用https访问。
导致静态资源无法加载访问。
如图

浏览器报错如下:

Mixed Content: The page at 'https://xxxx.com/' was loaded over HTTPS, but requested an insecure stylesheet 'http://xxxx//res/css/style.css'. This request has been blocked; the content must be served over HTTPS.

原因

这是因为浏览器的机制,当https的页面中有其他http的请求时,会被锁定和忽略,甚至不会经过nginx。
所以即使nginx设置了转发规则也没用。

为什么静态资源发起的请求是http的呢?
一般是使用绝对路径导致的。
我的请求方式如下:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<link rel="stylesheet" href="<%=basePath%>/res/css/style.css" type="text/css" media="all"></link></head>

解决方法一

可以在相应的页面的里加上这句代码,意思是自动将http的不安全请求升级为https

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

解决方法二

相对协议
对于同时支持HTTPS和HTTP的资源,引用的时候要把引用资源的URL里的协议头去掉,浏览器会自动根据当前是HTTPS还是HTTP来给资源URL补上协议头的,可以达到无缝切换。
例如:

<link rel="stylesheet" href="/res/css/style.css" type="text/css" media="all"></link></head>
或者
<link rel="stylesheet" href="res/css/style.css" type="text/css" media="all"></link></head>

转发请注明出处:遇到问题–jsp—Nginx转发https导致静态资源无法加载–This request has been blocked

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐