跨域cookie携带问题总结

server/2025/1/23 10:17:28/

背景

我们知道很多场景,都需要前端请求带上cookie,例如用户鉴权、登陆校验等。而有些场景下,我们会发现请求不会带上cookie,这是为什么呢?

概念

cookie是种在域名下的信息。只有请求同域且同站的请求,才能携带cookie。

首先,我们需要了解,跨站(cross-site)和跨域(cross-origin)是两个概念:

  1. 同站指:只要两个 URL 的 eTLD+1 相同即可(有效顶级域名+二级域名),不需要考虑协议和端口

  2. 同源指:协议/主机名/端口完全一致

浏览器的默认配置same-site:Lax,意味着部分cookie允许跨站请求携带,需同时满足以下条件:

  1. 顶级导航链接,如a标签(iframe不行)

  2. GET、HEAD请求(POST不行)

Secure: 只有HTTPS请求才会带cookie

HttpOnly: 客户端无法读取和修改cookie。

跨域能否携带cookie?

理论上,我们解决跨域问题无非是两种方式:

1. 直接请求跨域域名,前端设置withCredentials,然后后端设置CORS请求头来允许跨域。

2. 通过后端代理的方式,先访问同域名的后端服务,然后在后端转发到其他服务。

第一种方法,在same-site:Lax的情况下,是无法携带跨站cookie的。

第二种方法,可以携带cookie。

解决方案

1. 通过设置浏览器中的same-site: None;和HttpOnly: true,来实现跨站的cookie携带。但是这种方法基本只能解决本地调试问题,线上不可能通过这种方法。

2. 通过代理的方式携带cookie。推荐使用这种方案。 


http://www.ppmy.cn/server/160704.html

相关文章

VBA语言的安全开发

VBA语言的安全开发 在当今信息化迅猛发展的时代,数据安全和信息保护显得尤为重要。VBA(Visual Basic for Applications)作为一种广泛应用于Microsoft Office系列软件的编程语言,因其简易性和强大功能,成为了众多企业和…

Ubuntu20.04 安装 cartographer

刚装完,赶紧记录下来!——2025.1.22 官方网页: Compiling Cartographer ROS — Cartographer ROS documentation Building & Installation In order to build Cartographer ROS, we recommend using wstool and rosdep. For faster b…

HTML 元素详解:从入门到精通

HTML(HyperText Markup Language)是构建网页的基础语言,而 HTML 元素则是构成网页的基本单位。无论是网页的结构、内容还是样式,都离不开 HTML 元素。本文将深入探讨 HTML 元素的概念、结构、属性以及常见的使用方法,帮…

研究 Day.js 及其在 Vue3 和 Vue 框架中的应用详解

前言 在前端开发中,日期和时间处理是一个常见需求。随着技术的发展,我们有了更多高效、灵活的日期库可供选择。Day.js 就是一个轻量级、易于使用的 JavaScript 日期库,其灵感来源于 Moment.js,但体积更小,速度更快。本…

2025.1.19机器学习笔记:PINN文献精读

第三十周周报 一、文献阅读题目信息摘要Abstract创新点物理背景网络框架实验实验一:直道稳定流条件实验二:环状网络中的非稳定流条件 结论缺点及展望 二、代码实践总结 一、文献阅读 题目信息 题目:《Enhanced physics-informed neural net…

微服务与docker

准备工作 在课前资料中给大家提供了黑马商城项目的资料,我们需要先导入这个单体项目。不过需要注意的是,本篇及后续的微服务学习都是基于Centos7系统下的Docker部署,因此你必须做好一些准备: Centos7的环境及一个好用的SSH客户端装好Docker会使用Docker如果是学习过上面Doc…

[Qt] QPainter | Qpen | QPixmap

目录 绘图 1、基本概念 2、绘制各种形状 (1)绘制线段 (2)绘制矩形 (3)绘制圆形 (4)绘制文本 (5)设置画笔 【画笔的使用】 (6&#xff0…

leetcode 300. 最长递增子序列

题目如下 数据范围 这道题用暴力的角度来做的话时间复杂度是O(2^n)结合数据范围来看显然会超时。 那么我们可以考虑动态规划&#xff1a; 令dp[i]是以nums[i]为结尾的递增子序列的长度那么dp[i] max(dp[j] 1,dp[i])其中0 < j < i当然要满足nums[i] > nums[j]。 (…