浏览器自动携带cookie注意事项

news2025/3/24 16:08:26

文章目录

    • 浏览器自动携带与目标域相关的 cookie 是由 HTTP 协议规范和浏览器设计共同决定的
      • 一、Cookie 携带的基本规则
        • 同源策略下的自动携带
        • 跨域请求的受限携带
          • 一、服务器端配置
          • 二、客户端配置
          • 三、 常见错误及注意事项
      • 二、Cookie 属性的筛选逻辑
    • 三、浏览器携带cookie的准则
        • 1. **Cookie 的作用域(Domain 和 Path)**
        • 2. **Secure 属性**
        • 3. **HttpOnly 属性**
        • 4. **SameSite 属性**
        • 5. **Cookie 的过期时间(Expires/Max-Age)**
        • 6. **Cookie 的数量和大小限制**
        • 7. **请求的类型**
    • 四、cookie 的 domain详解
      • Cookie 的 Domain 属性匹配规则详解
        • 1. **默认行为:未显式设置 Domain 时**
        • 2. **显式设置 Domain 时**
        • 3. **子域名与父域名的交互**
    • 五、cookie属性总结

浏览器自动携带与目标域相关的 cookie 是由 HTTP 协议规范和浏览器设计共同决定的

HTTP Cookie - HTTP | MDN

前端必要懂的,完整的 HTTP cookie 指南 - 终身学习者 - SegmentFault 思否

一、Cookie 携带的基本规则

  1. 同源策略下的自动携带

    如果请求的 ​URL 域名、路径、协议与 Cookie 设置的 DomainPath 属性匹配,浏览器会自动将符合条件的 Cookie 附加到请求头的 Cookie 字段中

    示例

    • Cookie 设置 Domain=example.com,请求 URL 为 https://example.com/api携带
    • Cookie 设置 Path=/login,请求 URL 为 https://example.com/login/submit携带
  2. 跨域请求的受限携带
    一、服务器端配置
    1. 跨域请求中 cookie 的携带受到 CORS(跨域资源共享)的限制。默认情况下,浏览器不会在跨域请求中发送 cookie,除非服务器明确允许。这是因为如果服务器没有配置 CORS 头,浏览器会认为该请求不安全,从而阻止 cookie 的发送。
    2. 为了允许跨域请求携带 cookie,服务器需要返回特定的响应头。例如,设置 Access-Control-Allow-Origin 为请求的源,而不是通配符 *,因为 * 不允许携带 cookie。此外,还需要设置 Access-Control-Allow-Credentials 为 true,这样浏览器才会发送 cookie。
    3. 根据需求配置 Access-Control-Allow-MethodsAccess-Control-Allow-Headers
    4. Cookie 的 SameSite 属性未设置为 StrictLax。若需跨站携带,需设置为 SameSite=None; Secure(仅限 HTTPS)
    二、客户端配置

    在发起跨域请求时,需显式指定携带 Cookie:

    • 使用 JavaScript(如 fetch

      fetch('https://api.example.com/data', {
        credentials: 'include' // 携带 Cookie
      });
      
    • 使用 XMLHttpRequest

      xhr.withCredentials = true;
      
    三、 常见错误及注意事项
    • 错误 1:服务器返回 Access-Control-Allow-Origin: * 时,无法携带 Cookie。
      解决:必须指定具体源,而非 *
    • 错误 2:服务器未返回 Access-Control-Allow-Credentials: true
      解决:添加该响应头。
    • 第三方 Cookie 限制
      浏览器可能会阻止第三方 Cookie(如从 <iframe> 发起的跨域请求),需用户手动允许或调整浏览器设置。

二、Cookie 属性的筛选逻辑

​ 浏览器会根据 Cookie 的以下属性决定是否发送:

在这里插入图片描述

在这里插入图片描述

三、浏览器携带cookie的准则

1. Cookie 的作用域(Domain 和 Path)
  • Domain(域名)
    • Cookie 会被发送到其 Domain 属性指定的域名。如果 Domain 属性设置为 example.com,那么在访问 example.com 及其子域名(如 sub.example.com)时,该 Cookie 会被发送。
    • 如果没有设置 Domain 属性,则默认为当前页面的域名。
  • Path(路径)
    • Cookie 会被发送到其 Path 属性指定的路径及其子路径。例如,如果 Path 属性设置为 /user,那么在访问 /user/user/profile 等路径时,该 Cookie 会被发送,但在访问 /admin 时不会发送。
    • 如果没有设置 Path 属性,默认为当前页面的路径。
2. Secure 属性
  • 如果 Cookie 的 Secure 属性被设置为 true,那么该 Cookie 只会通过 HTTPS 协议发送,不会通过 HTTP 协议发送。这是为了防止 Cookie 在不安全的网络中被窃取。
  • 如果请求是通过 HTTP 发起的,那么带有 Secure 属性的 Cookie 不会被发送。
3. HttpOnly 属性
  • 如果 Cookie 的 HttpOnly 属性被设置为 true,那么该 Cookie 不能通过 JavaScript 的 document.cookie 访问,但仍然会通过 HTTP 请求发送到服务器。
  • 这个属性主要用于防止 XSS(跨站脚本攻击)。
4. SameSite 属性
  • SameSite=Lax
    • Cookie 只会在同站请求中发送。在跨站请求中,只有在请求是 GET 请求且是导航操作(如链接点击)时,Cookie 才会被发送。
  • SameSite=Strict
    • Cookie 只会在同站请求中发送,即使在跨站的 GET 请求中也不会发送。
  • SameSite=None
    • Cookie 在同站和跨站请求中都会发送,但需要同时设置 Secure 属性,否则浏览器不会发送该 Cookie。
  • 如果没有设置 SameSite 属性,浏览器会默认按照 LaxNone 的行为处理,具体取决于浏览器的实现。
5. Cookie 的过期时间(Expires/Max-Age)
  • 如果 Cookie 已经过期(Expires 属性指定的时间已到),那么浏览器不会发送该 Cookie。
  • 如果设置了 Max-Age 属性,Cookie 的有效期会根据 Max-Age 的值计算。
6. Cookie 的数量和大小限制
  • 浏览器对每个域名的 Cookie 数量和总大小有限制。例如,大多数浏览器允许每个域名最多存储 20 个 Cookie,总大小不超过 4KB。
  • 如果 Cookie 数量或大小超出限制,浏览器可能会丢弃一些旧的 Cookie。
7. 请求的类型
  • 对于跨站请求(即请求的域名与当前页面的域名不同),浏览器会根据 SameSite 属性决定是否发送 Cookie。
  • 对于同站请求(即请求的域名与当前页面的域名相同),浏览器会根据 DomainPathSecure 等属性决定是否发送 Cookie。

四、cookie 的 domain详解

Cookie 的 Domain 属性匹配规则详解

1. 默认行为:未显式设置 Domain 时
  • 匹配范围:Cookie 默认仅作用于当前请求的域名(即设置该 Cookie 的域名),不包含子域名。

    例如:

    • 访问 http://www.example.com 时设置的 Cookie,默认 Domain=www.example.com
    • 该 Cookie 不会发送到blog.example.comapi.example.com等子域名
  • 原理:浏览器认为未显式设置Domain的 Cookie 仅属于当前域名,这是出于安全性和隐私保护的默认设计

2. 显式设置 Domain 时
  • 匹配规则:若Domain被显式设置为.example.com(以点开头),则 Cookie 可被主域名及其所有子域名

    共享。

    例如:

    • Domain=.example.com → Cookie 会发送给www.example.comapi.example.com
    • Domain未以点开头(如Domain=example.com),部分浏览器可能自动补全为.example.com,但非所有浏览器均支持此行为
  • 安全限制:

    • 无法为顶级域名(如.com)设置 Cookie,必须包含至少两个点(如.example.com
    • Domain范围过广(如.com),浏览器会拒绝存储该 Cookie
3. 子域名与父域名的交互
  • 父域名 Cookie 影响子域名:若父域名(example.com)设置了 Cookie,子域名(api.example.com)的请求不会自动携带该 Cookie,除非显式设置Domain=.example.com

  • 子域名 Cookie 不影响父域名:子域名(api.example.com)设置的 Cookie(未显式设置Domain)仅在该子域名下有效,父域名(example.com)的请求不会携带它

五、cookie属性总结

  1. Domain 属性决定了 cookie 属于哪个域,只有当请求的域与 cookie 的 Domain 匹配时,才会被携带。
  2. Path 属性限制了 cookie 在该域下的路径范围。
  3. SameSite 属性,它控制 cookie 是否在跨站请求中被发送,比如 Lax 或 Strict 模式。
  4. Secure 属性要求 cookie 只能通过 HTTPS 连接发送,而 HttpOnly 属性则防止 cookie 被 JavaScript 访问。
  5. 过期时间:如果 Cookie 已经过期,不会发送。
  6. 数量和大小限制:如果 Cookie 数量或大小超出浏览器限制,可能会被丢弃。
  7. 请求类型:跨站请求和同站请求的处理规则不同。

发送,而 HttpOnly 属性则防止 cookie 被 JavaScript 访问。
5. 过期时间:如果 Cookie 已经过期,不会发送。
6. 数量和大小限制:如果 Cookie 数量或大小超出浏览器限制,可能会被丢弃。
7. 请求类型:跨站请求和同站请求的处理规则不同。

总结:浏览器在发送请求时确实会自动携带与目标域相关的 cookie,但并不是所有 cookie 都会被携带。这涉及到 cookie 的作用域和安全属性,比如 Domain、Path、SameSite 等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同旺科技USB to I2C 适配器 ---- 指令循环发送功能

所需设备&#xff1a; 内附链接 1、同旺科技USB to I2C 适配器 1、周期性的指令一次输入&#xff0c;即可以使用 “单次发送” 功能&#xff0c;也可以使用 “循环发送” 功能&#xff0c;大大减轻发送指令的编辑效率&#xff1b; 2、 “单次发送” 功能&#xff0c;“发送数据…

关于VSCode使用过程中的一些问题记录(持续更新)

1. VSCode更新拒绝访问 VSCode安装更新的时候出现&#xff1a; D:\Program Files\Microsoft VS Code\tools\inno_updater.exe 尝试在目标目录创建文件时发生一个错误&#xff1a;拒绝访问。 解决方法&#xff1a; 1. 禁止VSCode的自动检查更新&#xff0c;操作方法&#xff…

重新复活的(手机端)一站式应用管理与下载平台

应用乐园&#xff08;安卓&#xff09; 应用乐园作者去年3月表示&#xff0c;由于精力问题&#xff0c;要停止维护奇妙搜索、应用乐园、奇妙影视这些软件了。 然而最近&#xff0c;令人意外的是&#xff0c;应用乐园竟然“复活”了&#xff01;更准确地说&#xff0c;它进行了…

Vue3前端开发:组件化设计与状态管理

Vue3前端开发&#xff1a;组件化设计与状态管理 一、Vue3组件化设计 组件基本概念与特点 是一款流行的JavaScript框架&#xff0c;它支持组件化设计&#xff0c;这意味着我们可以将页面分解成多个独立的组件&#xff0c;每个组件负责一部分功能&#xff0c;通过组件的嵌套和复用…

失物招领|校园失物招领系统|基于Springboot的校园失物招领系统设计与实现(源码+数据库+文档)

校园失物招领系统目录 目录 基于Springboot的校园失物招领系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、 管理员功能实现 (1) 失物招领管理 (2) 寻物启事管理 (3) 公告管理 (4) 公告类型管理 2、用户功能实现 (1) 失物招领 (2) 寻物启事 (3) 公告 …

Pear Admin Flask 开发问题

下载代码请复制以下命令到终端执行 git clone https://gitee.com/pear-admin/pear-admin-flask 于是我下载git 完成安装后&#xff1a; 安装 Git 后出现的页面是 “Git for Windows 的版本发布说明&#xff08;Release Notes&#xff09;”&#xff0c;通常会在安装完成后自动弹…

1996-2023年各省公路里程数据(无缺失)

1996-2023年各省公路里程数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1996-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;公路里程&#xff08;万公里&#xff09; 4、范围&#xff1a;31省 5、指标解释&#xff1a;公路里程指报告期末…

量化研究---可转债量化交易系统上线快速服务器

现在可转债交易系统使用的人多&#xff0c;服务器比较小&#xff0c;今天对服务器进行了升级&#xff0c;提供快速的数据支持&#xff0c;同时我也给了服务器的源代码&#xff0c;支持自定义服务器数据支持&#xff0c;不通过我服务器&#xff0c;可以挂在服务器上面24小时快速…

用ArcGIS做一张符合环评要求的植被类型图

植被类型图是环境影响评价&#xff08;环评&#xff09;中的重要图件&#xff0c;需满足数据准确性、制图规范性和信息完整性等要求。本教程将基于ArcMap平台&#xff0c;从数据准备到成果输出&#xff0c;详细讲解如何制作符合环评技术规范的植被类型图。 ArcGIS遥感解译土地…

Java 双端队列实战 实现滑动窗口 用LinkedList的基类双端队列Deque实现 洛谷[P1886]

集合 关系 介绍 Deque 是一个接口 LinkedList 是这个接口的实现类 题目 输入输出 滑动窗口 基于双端队列实现 Deque<Integer> deque new LinkedList<>(); 滑动窗口代码 洛谷 public static List<Integer> maxSlidingWindow(int[] nums, int k) {List&l…

[学习笔记] VM虚拟机安装Ubuntu系统

前言 我现在装的Ubuntu总是死机&#xff0c;经常黑屏&#xff0c;所以我决定换个版本&#xff0c;顺便写一下笔记&#xff0c;给大家分享如何安装虚拟机 下载 这里我选择的是Ubuntu 22.04.5 LTS&#xff0c;下载链接&#xff1a;Ubuntu 22.04.5 LTS 如果访问不了网站的话&…

统计学重要概念:自由度

在统计学中&#xff0c;自由度&#xff08;degrees of freedom&#xff0c;简称df&#xff09;是一个重要的概念&#xff0c;它表示在计算某个统计量时可以自由变化的值的数量。对于一个样本量为n的样本&#xff0c;自由度通常为n-1&#xff0c;这是因为我们需要用样本数据来估…

为扣子智能体接入 DeepSeek

扣子现已推出满血版 DeepSeek 全家桶&#xff0c;支持免费体验 R1、V3 模型。除此之外&#xff0c;扣子支持 DeepSeek 思维链&#xff08;Chain-of-Thought&#xff0c;CoT&#xff09;和 Function Calling 能力&#xff0c;为你的智能体添加私有知识和多种技能&#xff0c;拓展…

Dear ImGui for Unity 常见问题解决方案

Dear ImGui for Unity 常见问题解决方案 dear-imgui-unity Unity package for Dear ImGui 项目地址: https://gitcode.com/gh_mirrors/de/dear-imgui-unity 1. 项目基础介绍 Dear ImGui for Unity 是一个开源项目&#xff0c;旨在将Dear ImGui库整合到Unity游戏引擎中。…

【Unity3D】摄像机适配场景以及Canvas适配

目录 宽度不变策略 高度不变策略 宽度不变策略 开发分辨率 750*1334 (宽高比:0.56) 真机分辨率 1170*2532 (宽高比:0.46) 真机宽高比<开发宽高比&#xff0c;采用宽度不变策略 理由&#xff1a;小于代表真机高度比开发高度更大&#xff0c;因此不需要担心高度上…

盛铂科技国产SLMF315超低相位噪声频率综合器介绍

SLMF315频率综合器简介&#xff1a; 盛铂科技SLMF315超低相位噪声频率综合器的频率范围覆盖200MHz至15GHz。频率的最小步进仅为0.1Hz&#xff0c;在不考虑频率精度的情况下频率步进可达0.04Hz。SLMF315内部采用多环路设计从而获得极优秀的相位噪声特性&#xff0c;频率输出为1…

SpringDoc和Swagger使用

目录 一、SpringDoc 1.添加依赖 2.配置代码 配置解释 &#xff08;1&#xff09;springdoc.api-docs.path &#xff08;2&#xff09;springdoc.swagger-ui.path &#xff08;3&#xff09;springdoc.swagger-ui.operationsSorter &#xff08;4&#xff09;springdoc.…

asp.net core mvc模块化开发

razor类库 新建PluginController using Microsoft.AspNetCore.Mvc;namespace RazorClassLibrary1.Controllers {public class PluginController : Controller{public IActionResult Index(){return View();}} }Views下Plugin下新建Index.cshtml {ViewBag.Title "插件页…

第2.2节 Android Jacoco插件覆盖率采集

JaCoCo&#xff08;Java Code Coverage&#xff09;是一款开源的代码覆盖率分析工具&#xff0c;适用于Java和Android项目。它通过插桩技术统计测试过程中代码的执行情况&#xff0c;生成可视化报告&#xff0c;帮助开发者评估测试用例的有效性。在github上开源的项目&#xff…

Vue3中router最佳封装落地

文章目录 前言一、拆分路由文件夹&#xff1f;二、main.ts中注册路由总结 前言 router在使用过程中如果我们直接在一个文件的一个数组中配置&#xff0c;最后路由越来越多会导致不易管理&#xff0c;我们可以将一个页面的路由配置在一个数组中最后统一导入&#xff0c;这样就会…