什么是跨域问题?
举个例子:你请求地址 http:1.2.3.4:8080/index.html,浏览器成功获取,然后你在index.html页面点击某个按钮发送ajax请求 http:5.6.7.8:8080/getUserInfo,请求能成功发送,服务器也成功响应,但是浏览器不认账,浏览器会认为你的响应数据不安全,于是报错终止后面代码的运行,这就是跨域问题的例子之一
简单说,当前地址栏的地址 与 当前页面里的请求地址,出现 协议或IP或端口 任一不同时,就会出现跨域问题。
跨域问题解决方案
方案一(不推荐)
跨域问题根本是协议或IP或端口 任一不同时才发生,那么只要规定页面所有请求都是同一协议地址端口,就可避免
但不推荐这么做,因为实际开发可能不单单只有一个项目,有多个项目,有前端项目,后端多个微服务项目,IP和端口不同是一定会发生的
注:在一种情况下可以采用此方案,就是nginx统一负载均衡,暴露同一个协议IP端口
方案二(推荐)
在后端做一个拦截器做统一跨域处理。这个具体我不说代码,只说原理,还是按上面的例子:
你请求地址 http:1.2.3.4:8080/index.html,浏览器成功获取,然后你在index.html页面点击某个按钮发送ajax请求 http:5.6.7.8:8080/getUserInfo,先让浏览器发送个option请求(也趁预请求),后端拦截器响应【此跨域是安全的】的头信息并具有时效性,于是浏览器在时效内再正式发送业务请求拿到响应数据就会认为是安全的了
这种方案目前用的最多,但是本人认为此处理有点忽悠。
缘由是浏览器任务此地址服务器响应的数据不安全,浏览器便发问【你是不是好人啊】,服务器给响应个【我是好人】,浏览器就这样信了,实在有点草率