跨域比想象中要复杂许多,例如 Access-Control-Allow-Origin: * 等于*时另外个跨域 cookie 的参数就不能等于 true 另外受 cdn 、nginx 的影响,响应头会被不小心更改到,导致产生跨域
不过一个项目开发的时候,如果项目组前后台沟通流畅的话,提前规划接口与前台页面的路径。 比如 {BASEURL}/yewuA/h5/是前台部署路径,{BASEURL}/yewuA/api/是后台部署路径。 前端可以控制 baseurl 放在不同环境的环境变量中打包。 前端脚手架来解决跨域问题是可以的,总不能现在还是让前端启动配置一个和测试生产环境一样的 nginx 来调试吧。 现在前端由于是编译的,没法做到使用类似../../这种相对路径请求接口,但前端接口请求一定不能是完整地址待域名端口(类似 http://域名:端口/)这种,一定要是直接到根这种。
跨域的问题不只是原理,你以为理解了,MDN 那个文档看过无数遍了,但是每次和前端对接都会出现新的问题,xhr ,fetch ,axios ,不同的库对 cors 的使用方法和处理方式不同,烦人的很,而且现在的跨域限制的更多了,以前能行的办法突然发现某些情况下又不行了。
讲点核心的: 首先,你得理解为什么浏览器要限制跨域: 1 ,比如我公司的静态 js 和图片,被某大流量网站直接引用了,我流量不直接被刷爆? 2 ,某域名直接 iframe 之类嵌套,或者引用我的资料,打着李逵额名号,其实是李鬼。 所以,浏览器限制了跨域请求。 问:那么,我们开发时,想要访问线上接口怎么办? 答:我们可以用 vite 之类 nodejs 的代理功能,通过代理访问线上接口,代理一词的意思是我们访问本地的接口,代理服务器通过本地程序(非浏览器)转发到线上接口。 问:如果我们确实有线上项目的跨域请求的需求怎么办? 答:我们可以在服务器设置 Access-Control-Allow-Origin ,将我们自己人加入白名单。 跨域,就是这么简单!