最近在研究nodejs,php的前后端分离相关东西,在调用接口的时候碰到一些跨域的问题,经过一段时间的摸索,总结出来的一些东西

php采用的是yii框架,登录的机制或者调用接口都需要前端传递cookie进去,但是nodejsaxios接口等默认是不会传递cookie

  • 跨域解析:浏览器请求非本域名的网站资源,如果目标服务器没有设置跨域的情况下,浏览器是会阻止用户的请求的
  • 跨域的解决途径:可以配置后端服务转发的机制绕开跨域问题;也可以直接配置目标服务器的跨域配置

配置转发

搭建一个和前端处于同一域名下的代理服务器,代理服务器把前端的请求转发到真正的目标服务器,接收到的请求再转发给前端

这个一般都是在nginx,apache,iis里面进行转发的

目标服务器的跨域配置

如果不配置代理服务器的话,那应该配置目标服务器的跨域配置了,如果是二次请求(第一次预请求OPTIONS方法,第二次真正请求GET/POST/PUT/DELETE)那应该配置nginx和后端(PHP/JAVA)代码响应了

 ### 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可以不用配置此选项

最新文章

  1. python网页抓取练手代码
  2. linux rlwrap
  3. Core Java Volume I — 3.4. Variables
  4. java代码实现自动登录功能
  5. cognos 10.2.2 Framework manager使用”数据源”新建查询主题
  6. Razor的理解
  7. Matlab将三维变量分割为多个二维变量的方法
  8. EXCEL数据导入数据库实例(NPOI)
  9. mysql-python 安装
  10. python简单线程和协程学习
  11. 通过maven profile 打包指定环境配置
  12. js-day01-js语言基础
  13. HTML学习总结(作业五)
  14. 解决ping 127.0.0.1 一般故障 问题
  15. js的微任务和宏任务
  16. 非关系型数据库&&缓存
  17. mysql5.5 for linux 安装(转)
  18. iOS开发--NSDateFormatter
  19. 图论之最短路径(3)队列优化的Bellman-Ford算法(SPFA算法)
  20. Android软件开发之EditText 详解(八)

热门文章

  1. 文件监控只FileSystemWatcher控件
  2. app启动黑屏
  3. ora-12541:tns: 无监听程序解决办法
  4. intellijidea课程 intellijidea神器使用技巧 4-1 重构
  5. JavaScript Hacks
  6. selenium Element not found in the cache - perhaps the page has changed since it was looked up接解决
  7. IDEA下通过Git实现代码管理
  8. 整理齐全 - Vultr VPS自定义安装Windows ISO(2003/2012/2008/WIN7)
  9. MHA故障切换方案
  10. Spring boot 集成三种拦截方式