最近写项目碰到个前后端分离的问题,踩了不少坑,给大家分享一些经验。

项目是传统的项目,没有做前后端分离,现在根据业务现状,需要改成前后端分离的形式去做开发,上来就碰到个头大的事,cookie没办法在前端后端进行传递保证登录状态,为了解决这个问题试了很多办法都不行,包括:

        1、后端更改response的header参数,修改Access-Control-Allow-Origin、Access-Control-Allow-Credentials均无效,前端request请求无法自动带上cookie。这种设置只能解决跨域访问接口的问题,但是解决不了跨域传递cookie的问题。

        2、后端增加一个返回cookie的接口,前端手动赋值传给后端,结果浏览器报错“refuse to unsafe cookie”。事实证明,浏览器的安全策略很到位,绕不过去。

 cookie无法传递的根本原因是浏览器对于cookie的同源策略限制,也就是必须要保证cookie是同一域名下,且path也正确,才可以使用cookie进行传递,比如www.a.com的接口返回的cookie没法在www.b.com中使用。

最后没办法了,最后上大招了,用了Nginx做反向代理解决跨域问题,使用Nginx中也是碰到了问题给大家讲一下。

首先说一下,十分推荐大家使用Nginx进行前后端分离,因为可以保证网站中所有请求都在一个域名之下,不用考虑跨域的问题了,而且Nginx的使用也没有很多开发初学者想的那么难,只要掌握基本的原理就可以了。

先从网上下载Nginx:nginx: download,我用的1.20.1版本。

然后修改Nginx配置文件,直接给到我的Nginx的配置文件:

 server {listen       443 ssl;             //开启sslserver_name  dev.dachong.com;     //域名ssl_certificate   e:/cert/1_dev.dachong.com_bundle.crt;    //crt证书路径ssl_certificate_key  e:/cert/2_dev.dachong.com.com.key;    //key证书路径ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;location /webapi {  //后端url的pathroot   html;index  index.html index.htm;proxy_pass https://localhost:1001/;       //后端域名,注意要带斜杠proxy_cookie_path  /webapi  /;               //修改cookie的path为全路径/ } location / {  root   html;index  index.html index.htm;proxy_pass https://localhost:1000/;         //前端域名,注意要带斜杠}      }

因为我这个用到了https,所以需要导入证书,证书是在腾讯云下载的,配置文件里的证书路径可以用绝对路径(我用的绝对路径),也可以用相对路径,默认是相对的,cert可以放在conf文件夹下。配置文件写完了之后,直接双击nginx.exe启动就好了,so easy!

此时在打开浏览器输入dev.dachong.com即可访问到前端页面,dev.dachong.com/webapi即可访问到后端服务器。

 要注意一点,给nginx配好域名或者用80端口也可以,不能用IP加非80端口号形式,如果你nginx没有域名,直接用的ip:端口,cookie的domain会是ip,但是调接口用的ip:端口,还是会导致cookie附带不上。

Nginx解决前后端分离(适用于传统项目改前后端分离)相关推荐

  1. 一、ubuntu-django+nginx+uwsgi:ubuntu系统部署django项目,前后端不分离项目

    一.创建用户和文件夹 #创建www文件夹,所有网站项目都放到这里 $ sudo mkdir /www #创建用户组 sudo groupadd www -g 666 #创建用户 $ sudo user ...

  2. 无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离

    近年来,前后端分离已经成为中大型软件项目开发的最佳实践. 在技术层面,前后端分离指在同一个Web系统中,前端服务器和后端服务器采用不同的技术栈,利用标准的WebAPI完成协同工作.这种前后端分离的&q ...

  3. Vue整合nginx:(1)开发环境npm run dev下,通过nginx解决前后端分离造成的跨域问题

    Vue整合nginx:(1)开发环境npm run dev下,通过nginx解决前后端分离造成的跨域问题 参考文章: (1)Vue整合nginx:(1)开发环境npm run dev下,通过nginx ...

  4. 前后端分离的项目部署到tomcat_如何在开发时部署和运行前后端分离的JavaWeb项目...

    在开发中大型的JavaEE项目时,前后端分离的框架逐渐成为业界的主流,传统的单机部署前后端在同一个项目中的工程项目越来越少.这类JavaWeb项目的后端通常都采用微服务的架构,后端会被分解为诸多个小项 ...

  5. SpringBoot+vue前后端分离博客项目

    SpringBoot+vue前后端分离博客项目 Java后端接口开发 1.前言 2.新建Springboot项目 3.整合mybatis plus 第一步:导入jar包 第二步:然后去写配置文件: 第 ...

  6. easyui框架前后端交互_Vue+ElementUI+.netcore前后端分离框架开发项目实战

    点击上方"前端教程",选择"星标" 每天前端开发干货第一时间送达! 转自:我心依旧.cnblogs.com/-clouds/p/11633786.html 框架 ...

  7. 一款小清新的 SpringBoot+ Mybatis 前后端分离后台管理系统项目

    今日推荐 推荐3个快速开发平台 前后端都有 项目经验又有着落了推荐一个高仿微信的项目 有点屌!!一二线城市知名 IT 互联网公司名单(新版) 项目介绍 前后端分离架构,分离开发,分离部署,前后端互不影 ...

  8. 【Java从0到架构师】项目实战 - 前后端分离、后端校验、Swagger、全局异常处理

    项目实战 - 前后端分离.后端校验.Swagger Layui 同源策略 SpringMVC 实现 CORS 后端校验 - hibernate-validator 方法的 Model 参数校验 方法的 ...

  9. Vue+ElementUI+.netcore前后端分离框架开发项目实战

    点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Smile and stop complaining about th ...

最新文章

  1. c语言 北京时间转换utc时间_mysql之unix时间戳和正常时间格式之间的转换
  2. matlab验证Ross随机过程(第二版)P19页的结果
  3. leetcode24. 两两交换链表中的节点
  4. 数据结构----归并排序
  5. php html邮件,php发送HTML邮件
  6. SpringCloud学习--微服务架构
  7. Delphi Format函数功能及用法详解
  8. mysql 分页 order_Mysql查询使用limit分页,同时使用order by可能产生的问题
  9. 数据库-MySQL-数据库设计-外键
  10. [20160803]另类行迁移.txt
  11. [渝粤教育] 中国地质大学 思想道德修养与法律基础 复习题
  12. 从零开发微信公众号(PC)
  13. ectouch java_ectouch: 包含 ECTouch_v2.7.2_SC_UTF8 ECshop_v3.6.0_UTF8_release ECShop_V4.0.0_UTF8
  14. 三维计算机学校,什么是三维虚拟校园系统?
  15. WINDOWS 2008 R2 下安装usb转serial线缆驱动
  16. js实现代码高亮显示
  17. 8421拨码开关C语言编程,8052单片机怎样读出8421BCD码拨码开关设定的数值
  18. python requests 爬取代理ip并验证(快代理西祠代理)
  19. 炒币风潮又起,区块链不该这么玩
  20. 每周分享第二期:人工智能对未来工作的影响

热门文章

  1. vcredist_x86 vs2013检查
  2. c语言程序中间改变数组大小,结构中间的可变长度数组 – 为什么这个C代码对gcc有效...
  3. ubuntu18 CUDA版本降级
  4. SSM毕设项目物品租赁平台22bc1(java+VUE+Mybatis+Maven+Mysql)
  5. 物品租赁系统(SSM,mysql)
  6. 【干货】S7-PLCSIM Advanced V3.0 无法启动实例( Error Code:-30,LicenseNotFound)问题解决方法
  7. realme真我gt能升级鸿蒙系统吗,realme真我GT Neo专为学生党打造,堪称性价比之王...
  8. 修改Linux用户名密码的指令
  9. 程序包无效 “CRX_HEADER_INVALID”
  10. kali Linux联网配置