跨源资源共享 (CORS)(或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它 origin(域,协议和端口),使得浏览器允许这些 origin 访问加载自己的资源。

举例

运行在 https://domain-a.com 的 JavaScript 代码使用 XMLHttpRequest 来发起一个到 https://domain-b.com/data.json 的请求。出于安全性,浏览器限制脚本内发起的跨源HTTP请求,这就返回了CORS错误。

示意图

跨源域资源共享(CORS)机制允许 Web 应用服务器进行跨源访问控制,从而使跨源数据传输得以安全进行。

有些请求(非简单请求)会出发CORS预检,浏览器使用OPTIONS方法发起,获得此服务端是否允许该跨源请求,服务器确认允许后才发送实际的HTTP请求。

如何应对跨域问题

后端解决

注:待实践后完善

利用预检获知服务端对跨源请求支持的HTTP方法。再以实际的HTTP请求方法发送那个真正的请求

优点:

  1. 前端方便
  2. 一劳永逸
  3. 开发环境和正式环境都可以使用

缺点:

  1. 后端稍麻烦

前端解决

开发环境使用webpack的proxy解决,正式环境使用Nginx反向代理

参考资料

vue-element-admin 文档
MDN