跨域

135 阅读1分钟

为什么会出现跨域?

 浏览器要遵循同源策略,只要域名端口协议有一个不同, 就是跨域了
 当下, 最流行的就是前后分离开发项目,也就是前端项目和后端接口并不在一个域名之下,
 那么前端项目开发时, 去访问后端接口就会存在跨域的行为.

如何解决跨域请求数据?

解决方案:
1: jsonp 缺点: 只能get请求 比如:文件上传FormData jsonp就实现不了
  原理: 动态的创建script 添加src属性发送请求(但是这个请求是异步的)
  在页面上声明了一个函数,服务器端返回的是函数调用
2: cors
   原理: 在响应头中添加 Access-Control-Allow-Origin: *   
3: 反向代理
   原理: 静态资源服务器与接口服务器之间进行通信,静态资源服务器再将数据交给浏览器
请注意,我们所遇到的这种跨域是位于开发环境(webpack代理服务器),真正部署上线时的跨域是生产环境(nginx服务器, 或者后台配cors)

解决开发环境的跨域问题

image.png

接下来,我们在代码中将要代理的后端地址变成 [后端接口地址]
 // 代理跨域的配置
 proxy: {
  // 当我们的本地的请求 有/api的时候,就会代理我们的请求地址向另外一个服务器发出请求
 '/api': {
         target: 'http://ihrm-java.itheima.net/', // 跨域请求的地址
     }
   }
   

image.png image.png

image.png

vue.config.js的改动如果要生效,需要进行重启服务,一定要注释掉(或删除) mock的加载,因为mock-server会导致代理服务的异常

image.png

image.png