当前位置: 首页 > news >正文

架构设计-web项目中跨域问题涉及到的后端和前端配置

WEB软件项目中经常会遇到跨域问题,解决方案早已是业内的共识,简要记录主流的处理方式:

跨域感知session需要解决两个问题:

1. 跨域问题

2. 跨域cookie传输问题

跨域问题

解决跨域问题有很多种方式,如使用springboot自带的crossOrigin注解

@CrossOrigin(origins = {"*"}, allowedHeaders = "*")

添加这个注解后,所有的http response头上都会加上
Access-Control-Allow-Origin * 以及
Access-Control-Allow-Headers * 两个头部,这样可以满足CORS的跨域定义,前端看到这两个头部就认定对应的域名接收任何来自或不来自于本域的请求

跨域传递cookie的问题

跨域和跨域传递cookie是两个不同纬度的问题,如果要做到跨域感知session的前提下将cookie也能传上去,这个时候就需要设置另外一个头部。

@CrossOrigin(origins = {"*"}, allowCredentials = "true", allowedHeaders = "*")

使用了 allowCredentials 后 Access-Control-Allow-Credentials 头被设置成 true,同时前端设置xhrField:{withCredential:true} 后,浏览器在前端网络请求内带上对应的 cookie 头部和后端的allowCredentials 配合在一起解决跨域传递 cookie 的问题。如果项目中只使用了get、post方法,而这两个方法在跨域请求中都是可以用的,allowedHeaders 可以不加。

另外当设置了 allowCredentials = “true" 时,origins = {”*"} 就失效了,因为一旦设置了跨域传递cookie 就不能再设置接受任何 origins,而 springboot 的实现方式是返回的 allow origin 取request内的 origin,即前端 html 页面路径。这样就可以实现允许使用了跨域的 origin。

注意:许多浏览器 (safari和最新版本的 chrome) 默认设置不支持携带跨域 cookie,即便代码写成允许,浏览器底层也做了限制,因此在调试的时候可以关闭对应的限制,也可以使用其他跨域处理方式。

http://www.lryc.cn/news/368700.html

相关文章:

  • ==Redis淘汰策略(内存满了触发)==
  • 2024年高考作文考人工智能,人工智能写作文能否得高分
  • Vue3学习记录第三天
  • 数仓建模中的一些问题
  • spring整合kafka
  • 【web前端】CSS样式
  • 【ARM Cache 与 MMU 系列文章 7.7 – ARMv8/v9 MMU Table 表分配原理及其代码实现 1】
  • AIGC之MetaHuman:HeyGen(基于AI驱动的视频生成平台+数字人)的简介、安装和使用方法、案例应用之详细攻略
  • 6.7-6.10作业
  • 【Redis】Redis经典问题:缓存穿透、缓存击穿、缓存雪崩
  • 从GPU到ASIC,博通和Marvell成赢家
  • 【java问答小知识6】一些Java基础的知识,用于想学习Java的小伙伴们建立一些简单的认知以及已经有经验的小伙伴的复习知识点
  • 数学建模笔记
  • shell编程(三)—— 控制语句
  • 反射学习记
  • 使用Python操作Redis
  • Vue-CountUp-V2 数字滚动动画库
  • C语言详解(文件操作)1
  • Python Requests库详解
  • Kafka 详解:全面解析分布式流处理平台
  • RabbitMQ系列-rabbitmq无法重新加入集群,启动失败的问题
  • postgresql之翻页优化
  • 小白学Linux | 日志排查
  • Spring6
  • 数字孪生概念、数字孪生技术架构、数字孪生应用场景,深度长文学习
  • 云服务对比:阿里云国际站和阿里云国内站有什么区别
  • 如何在npm上发布自己的包
  • SQL Chat:从SQL到SPEAKL的数据库操作新纪元
  • jmeter性能优化之mysql配置
  • VueRouter3学习笔记