在https的网站里访问http的静态资源
场景:出于安全考虑,项目的前端访问地址由原来的http变为了https的地址。导致项目中的一些资源或者接口(原本在http的第三方服务器上)无法正常访问了。
解决问题思路:
1、联系服务提供商,让他们将资源换成https的。结果提供商不配合。。。。
2、自己配置代理。将资源请求发送到自己的https的前端服务,通过代理转发到http的静态资源服务器上,然后将拿到的资源以https的形式返给浏览器。
具体步骤:
A 拿到后端返回的静态资源地址后,不要直接请求,也不会请求成功,因为你前端是https的。
B 前端处理请求地址,将拿到的地址去掉协议、域名、端口号后,进行请求,这样会将请求发送到你前端页面所在的服务器。改完的地址类似这样 “/TDT/SdPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=image%2png”
C 进行代理配置,给改完的地址随便加一个“头”,类似"/ditu",改完之后就变成了这样,
/ditu/TDT/SdPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=image%2png
在开发环境下,配置一下node代理服务器,如下:
"/ditu": {//地图服务
target: `http://XXXXXXXXXXX`,
changeOrigin: true,
pathRewrite: {
"^/ditu": "",
},
},
部署到生产环境,nginx进行代理配置,如下
经过以上步骤,你就成功实现了从https的网站中访问到了http的静态资源。