前后端分离部署与跨域

443 阅读1分钟
https://www.my.com/api
https://api.my.com

同站,可以共用一个cookie
但不同源(协议、主机均不同),有跨域限制

跨域 cross-origin

产生原因:浏览器同源策略SOP(Same-origin policy)。注意:服务器没有跨域限制。

即协议protocol、主机port、端口host有任一不同,就会限制资源交互,主要包括:

  • cookie、localstorage、indexdb无法获取
  • dom无法获得
  • ajax请求无法发送

区分:跨站 cross-site

跨站,即 eTLD+1 不同(有效顶级域名+二级域名)

第一方、第三方cookie,其实指的是否跨站。

跨域的解决方案

前后端分离项目会经历三套环境:开发环境、测试环境、生产环境,会遇到不同的跨域情况。

开发阶段

项目运行,启动一个本地开发服务器(基于webpack-dev-server,提供本地服务,仅适用于开发环境),独立运行在一个端口上。

Eg.
前端:localhost:8080
后端:localhost:3000
请求地址:localhost:3000/api/xxx
  • Node中间件正向代理(webpack、vue-cli等) 在devServer配置proxy,添加一个虚拟的中间代理服务器,转发请求。

生产阶段

前后端分离项目

  • 前端:展示数据。可以是 web 端、小程序端、移动端
  • 后端:提供接口 部署方案与跨域解决
  • 不存在跨域:前端dist复制到后端项目中,作为后端项目的静态资源,部署后端项目到服务器。
  • nginx反向代理:前端dist部署到nginx,配置代理转发请求到后端。