最近在研究
nodejs
,php
的先后端分离相关东西,在调用接口的时候碰到一些跨域的问题,通过一段时间的摸索,总结出来的一些东西php
php
采用的是yii
框架,登陆的机制或者调用接口都须要前端传递cookie
进去,可是nodejs
的axios
接口等默认是不会传递cookie
的前端
搭建一个和前端处于同一域名下的代理服务器,代理服务器把前端的请求转发到真正的目标服务器,接收到的请求再转发给前端
这个通常都是在nginx
,apache
,iis
里面进行转发的node
若是不配置代理服务器的话,那应该配置目标服务器的跨域配置了,若是是二次请求(第一次预请求
OPTIONS
方法,第二次真正请求GET/POST/PUT/DELETE
)那应该配置nginx
和后端(PHP/JAVA
)代码响应了ios
### nginx 配置 location / { if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin http://xc.com:9599; add_header Access-Control-Allow-Headers *; add_header Access-Control-Allow-Methods POST,OPTIONS; add_header Access-Control-Allow-Credentials true; return 204; } index test.php ; autoindex on; try_files $uri $uri/ /test.php?$args; }
//php配置 在返回的header里面添加相应头部 header('Access-Control-Allow-Origin:http://frontend.com:9599');//允许跨域的前端站点 header('Access-Control-Allow-Headers:*');//允许传递的header header('Access-Control-Allow-Credentials:true');//须要校验 配置此项结合NODEJS的配置项能够经过接口传递cookie
//nodejs 配置 const service = axios.create({ baseURL: process.env.BASE_API, // api 的 base_url timeout: 5000, // 请求超时时间 withCredentials: true // 容许携带cookie })
cookie
访问问题,配置Credentials
是为了便于接口传递cookie
,若是接口不用cookie
能够不用配置此选项