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

【开发环境下浏览器前后端Cookie跨域问题】

开发环境下浏览器前后端Cookie跨域问题

  • 一、背景
  • 二、同源策略
    • 2.1 同源策略的核心
      • 2.1.1 请求url
      • 2.1.2 请求头
    • 2.2 跨域问题的几个关键点
  • 三、处理方案

一、背景

后端SpringBoot
前端VUE
跨域问题的核心在于浏览器的同源策略(Same-Origin Policy)

二、同源策略

2.1 同源策略的核心

2.1.1 请求url

  1. 协议:请求的协议必须相同(如http和https)。
  2. 域名:请求的域名必须相同(如example.com和sub.example.com)。
  3. 端口:请求的端口必须相同(如80和443)。
  4. 如果这三者中任何一个不同,浏览器就会认为这是一个跨域请求,并且会根据同源策略进行限制。

2.1.2 请求头

  1. 请求头中的Host字段,Host字段用于指定请求的目标服务器的域名或IP地址,它在HTTP请求中是必须的。在跨域请求中,Host字段通常会被设置为目标服务器的域名。

2.2 跨域问题的几个关键点

浏览器会检查请求的源(协议、域名、端口)是否与目标源一致。
如果不一致,浏览器会阻止某些操作,如读取或修改目标源的资源。
CORS(跨源资源共享):
后端服务器可以通过设置响应头来允许跨域请求。
常见的响应头包括:
Access-Control-Allow-Origin:指定允许访问的源。
Access-Control-Allow-Methods:指定允许的HTTP方法。
Access-Control-Allow-Headers:指定允许的请求头。
Access-Control-Allow-Credentials:是否允许发送Cookie。
预检请求(Preflight Request):
浏览器在发送某些跨域请求之前,会先发送一个OPTIONS请求(预检请求),以检查服务器是否允许该跨域请求。
如果预检请求失败,浏览器会阻止实际请求。

三、处理方案

  1. 在生产环境下,最佳处理方案就是nginx代理

  2. 在开发环境中,最佳方案就是vue的proxy代理请求,通过配置vue.config.js,非常类似于nginx,效果如下:

    1. 前端运行为http://lcoalhost:8080。请求代理后端为:http://caasf.asf.com,此时无论如何调整后端的CORS,或者前端的跨域限制,总会因为cookie的domain或者其他限制导致浏览器无法存储cookie,或者存储了也无法使用
    2. 使用vue的proxy代理请求后,如果请求路径匹配代理配置中的路径(如/api),Vue开发服务器会将请求转发到指定的后端服务(http://caasf.asf.com)
    3. 在转发请求时,Vue开发服务器会修改请求的Host头
    4. 浏览器看到的请求是http://localhost:8080,且host也是localhost:8080,其他浏览器请求头都是localhost:8080,但实际最终请求到http://caasf.asf.com,而且返回的cookie domain也是localhost:8080,保证同源
  3. 使用vue的proxy代理请求,后端完全不需要配置CORS相关策略,直接使用即可

vue.config.js配置如下

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true
})
// vue.config.js
module.exports = {devServer: {proxy: {'/api': {target: 'http://caasf.asf.com',changeOrigin: true}}}
};
http://www.dtcms.com/a/327162.html

相关文章:

  • 实现文字在块元素中水平/垂直居中详解
  • 深度贴:前端网络基础及进阶(3)
  • Linux 常用命令大全:覆盖日常 99% 操作需求
  • 【SpringBoot】05 容器功能 - SpringBoot底层注解的应用与实战 - @Configuration + @Bean
  • WebAssembly的原理与使用
  • Day24|学习前端CSS
  • 虚拟机高级玩法-网页也能运行虚拟机——WebAssembly
  • GitHub的简单使用方法----(4)
  • Seata深度剖析:微服务分布式事务解决方案
  • 如何应对CAN总线冲突和数据丢包
  • GitHub Browser-Use 的部署失败记录:失败了,失败了。。。。
  • 在 Windows 上升级 Python 到 3.8 的步骤
  • 【微服务过度拆分的问题】
  • IEEE 2025 | 重磅开源!SLAM框架用“法向量+LRU缓存”,将三维重建效率飙升72%!
  • 学习嵌入式的第十七天——Linux编程——shell编程
  • 【图像算法 - 13】基于 YOLO12 与 OpenCV 的实时目标点击跟踪系统(系统介绍 + 源码详细)
  • centos 怎么部署 vscode 网页版
  • 如何提升需求分析能力
  • 数据分析—双十一
  • Linux磁盘空间逻辑卷扩容
  • 服务器service托管java服务
  • 【无标题】centos 配置阿里云的yum源
  • 如何区分类的关系是关联和聚合?
  • 【数据结构】二叉树经典OJ题与OJ题解析
  • 【传奇开心果系列】Flet框架实现的多人访问web数据表高并发前后端自定义框架模板
  • iPhone 17 Pro 为何被指像充电宝?
  • 【2025最新版】视频转换软件VideoProc Converter Al 便携版 功能强大的视频转换工具 百度网盘
  • iPad 引导式访问(Guided Access)完整指南
  • 26 届秋招建议指南
  • Web 安全之互联网暴露面管理