服务器架构图:
背景:
- 我的chrome版本98,用户的版本也不会低于68。
- 这个硬件设备的架构甲方不让改,就是说ABC之间的模式我们不能动,我们只能在服务器BC里面安装服务器软件来做一些改变。
- 前端的项目和后端的项目都是部署在weblogic服务器里面。之所有搞了BC两台服务器来部署,PM说要做负载均衡,所以两个weblogic部署的其实是同一个项目,只是会通过A来反向代理,所以用户访问项目的时候,这个前端页面可能来自B也可能来自C。weblogic中的前端项目是我们开发的,但是报表服务器D中的项目是购买的别人产品,并且我们是通过iframe的srcdoc属性方式引用报表页面到我们页面的。
问题:
因为使用了iframe去加载另外一个服务器的页面,导致前端会出现跨域问题,所以我们很自然就想到了使用Nginx的反向代理+CORS跨域来解决这个问题,所以当用户访问A的时候有两种情况:
- 当A访问B,B的weblogic返回前端资源,当用户在页面打开报表的时候,这个时候浏览器直接去请求B中的nginx,因为nginx设置了cors跨域,所以第一个doc请求是成功的,后续关于报表的分页的xhr请求也都是成功的。
- 当A访问C,C的weblogic返回前端资源,当用户在页面打开报表的时候,这个时候浏览器直接请求B中的nginx,因为nginx设置了cors跨域,所以第一个doc接口请求是正常的,可是后续分页的xhr请求却失败了,我们找到了失败的原因,发现存在浏览器缓存里的cookie无法被请求携带。
后面我们自己模拟了实际情况,发现nginx的cors跨域只能在IP相同的服务器下面进行,若是IP和nginx IP不同的服务器中的页面发起去nginx的请求则会出现cookie无法携带的问题,但是cookie可以正常存在浏览器,如果你不设置cors跨域,浏览器都看不到相关的cookie存在。
请问这个问题如何解决?
我感觉你可以把报表服务器也直接反向代理配置在硬件服务器A上,然后在你的html引用报表的地址也配置成硬件服务器A的地址,那对于浏览器来说它不管请求任何资源入口都是硬件服务器A的地址和端口,那不就没有跨域的问题了?