A Roadmap
  • Introduction
  • Roadmap
  • Basics
    • Basic Terminal Usage
      • Shell
        • 基本
        • 变量
        • 传递参数
        • 运算符
        • 命令
        • 流程控制
        • 函数
        • 输入输出重定向
    • Character Encoding
      • 字符编码
    • Data Structures & algorithms
    • Network
      • TCP/IP
      • Http/Https
        • 浏览器缓存
        • Status Code
        • GET & POST
        • HTTPS 握手过程
        • HostOnly Cookie
      • CDN
        • CDN 工作原理
    • Version Control
      • git message format
      • git commands
    • Principles
    • Design Patterns
    • Others
      • JSON
      • 正则表达式
  • Front End
    • Web Standard
      • Html
      • CSS
        • font-face 小记
        • Grid 布局简易笔记
      • Javascript
        • Ajax
          • Fetch
          • XMLHttpRequest
        • DOM
          • Selection
          • 常用 DOM 操作
          • script 标签的几个属性
        • Ecmascript
          • this 关键字
          • Event Loop
          • 隐式转换
          • Date
        • Event
          • 模拟事件
          • Others
    • Development
      • Package Management
        • npm
      • Modulization
        • 模块化机制
        • webpack 打包解析
      • Architecture
      • Build Tools
        • 如何编写一个自定义的 eslint 规则?
      • Debug
        • 移动端调试 web
      • Pre/Post Processors
      • Test
        • Jest Snapshot 使用指南
      • Type Checkers
        • TS 中 enum 的编译结果
    • Libs & frameworks
    • Platforms
      • Browser
        • Basics
          • 从输入 URL 到页面加载完成都发生了什么事情?
          • HTML 加载的过程示意图
          • 为什么读取某些属性,也会导致回流?
          • Chrome 进程模型
        • PWA
        • Compatible
        • Cross Origin
        • Performance
          • 性能检测:performance 对象
          • 性能指标
        • Others
          • 移动端 web 开发笔记
      • Server
      • Desktop Applications
      • Mobile Applications
        • Flutter 在移动端和 Web 端的技术实现
  • Back End
    • outline
    • Languages
      • Node
        • Event Loop
        • NodeJS 中的进程与线程
        • NodeJS 中的 esModule 与 commonJS
  • Clients
    • outline
    • 安装 IPA 包
  • DevOps
    • Languages
    • OS Concepts
    • Servers & terminal
  • UI & UX
    • outline
  • Others
    • Posts
      • 使用 node 爬取数据并导出到 excel
      • antd 1.x datepicker 时区问题
      • babel-transform-runtime 踩坑记录
      • lodash 按需加载注意事项
      • 记一次项目迁移的踩坑记录
      • 时区与JS中的Date对象
      • 记一次 vue + ts 开发踩坑
    • Tools
      • 个人常用的工具分享
      • tmux 简要笔记
Powered by GitBook
On this page

Was this helpful?

  1. Basics
  2. Network
  3. Http/Https

HostOnly Cookie

PreviousHTTPS 握手过程NextCDN

Last updated 3 years ago

Was this helpful?

大部分场景下,浏览器中都不会存在两个同名的 cookie。但是按照以下代码对 cookie 进行赋值,就会发现在 chrome 当中,出现了两个同名的 cookie。

function setCookie(name,value,extra) {
  document.cookie = `${name}=${value || ""}; path=/; ${extra || ""}`
}

setCookie("a","a1")
setCookie("a","a2", "domain=www.baidu.com")
setCookie("a","a3", "domain=.www.baidu.com")

在 cookie 中不包含 domain 属性,或者 domain 属性为空 / domain 属性不合法(不等于页面 url 中的 domain 部分、也不是页面 domain 的大域)时,host-only-flag 为 true。此时,我们把这个 cookie 称之为 HostOnly Cookie。

浏览器在获取 cookie 时,首先要检查 domain 匹配性,其次才检查 path、secure、httponly 等属性的匹配性。如果 host-only-flag 为 true 时,只有当前域名与该 cookie 的 domain 属性完全相等才可以进入后续流程;host-only-flag 为 false 时,符合域规则(domain-matches)的域名都可以进入后续流程。

以 baidu.com 为例,在这个站点设置 HostOnly Cookie,即前文的 setCookie("a","a1")。在 www.baidu.com,是无法访问到这个 cookie 的,因为 domain 无法完全匹配上。

而我们在设置了具名的 domain,比如 setCookie("a","a3", "domain=.www.baidu.com") 和 setCookie("a","a3", "domain=.www.baidu.com") 时,由于 host-only-flag 为 false,尽管多了一个 .,这两者也会相互覆盖。

这种 cookie 也即 HostOnly Cookie,相关内容笔者均从了解,并在 chrome 97 进行了实践。

你所不知道的 HostOnly Cookie