Hostonly cookie是什么鬼?

08c45b8e84798085a0dc78ded34148b4.gif

点击上方蓝字关注我们吧

81f32aeb88438f433b706fa11143fa13.png

知道cookie hostonly属性的请举手🧐

01

Cookie常见姿势、疑难梳理

目前w3c定义浏览器存放每个cookie需要包含以下字段:

cookie属性基本描述举例备注
name=valuecookie键值对id=a3fWa
expirescookie过期时间expires=Tue, 10-Jul-2013 08:30:18 GMT
secure指定通过https请求发送cookie
Restrict access to cookies
httponly指示是否允许通过JavaScript Document.cookie API访问cookie
Restrict access to cookies
domain指定哪些主机可以接收cookieDomain=mozilla.org;   不设置则等于当前页面domianDefine where cookies are sent
path指示哪些路径的请求会携带cookiePath=/docsDefine where cookies are sent
samesite让服务器指定是否允许跨站请求携带cookieSameSite=LaxDefine where cookies are sent

cookie属性之间用;连接;多个cookie设置,产生多次Set-Cookieheader

HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: X-BAT-FullTicketId=TGT-969171-******;domain=bat.com; path=/; samesite=none; httponly

[page content]

第一方cookie、第三方cookie:
cookie与domian密切相关,如果cookie的domain属性与你当前查看的页面的domain相同,cookie被称为第一方cookie;
如果不同,则称为第三方cookie, 第三方cookie通常用于广告和用户行为追踪。

以上属性决定了后续请求能否正常访问cookie并携带cookie, 其中与cookie安全密切相关的三个属性:

  • secure

  • httponly

  • samesite

这三个cookie属性也是单点登录、跨域访问常遇到的阻碍的技术突破点。

 10分钟掌握cookie全貌

[ASP.NET Core 3.1]浏览器嗅探解决部分浏览器丢失Cookie问题

02

HostOnly cookie是什么鬼?

今天介绍一个不常见的cookie的属性hostonly,但是也曾给码甲哥造成了一点阻碍。

① 这是一个不可手动修改的cookie属性,类似 Sec-Fetch-、 Origin标头,都是浏览器自动判断并赋值。

② 判断逻辑:

如果domain-attribute非空:如果规范化之后的request-host不匹配domain-attribute  
中的域名,那么完全忽略掉cookie并且终止这些步骤;否则,将cookie的host-only-flag  
设定为false,并且将cookie的domain设定为domain-attribute。    
否则:将cookie的host-only-flag设定为true,并且将domain设定为规范化之后的request-host。

03

爬坑经历

我当时在做一个 单点登录的时候,原意图是: 设置cookie的domain属性为父域名,向子域名请求时能自动携带cookie, 但事与愿违,子域服务器始终收不到cookie。

8219c82234e764f28e84e47ae65dfc02.gif

我坚信:

成熟的技术一定会有成熟的诊断姿势!
成熟的技术一定会有成熟的诊断姿势!
成熟的技术一定会有成熟的诊断姿势!

Chrome浏览器开发者工具显示:

疑点1:我的这个cookie在请求子域时被滤除了。

fe105be6ad6303b0c7a301d6492e45fd.png

鼠标悬停黑色感叹号,显示我这是一个hostonly cookie, 这就奇怪了,这个cookie的domain值也是正常的,但是多了一个hostonly属性。


疑点2:在原种植cookie的响应流Set-Cookie header,这个cookie的domain键值对消失了。

围观我设置Cookie的错误代码:

1c0dccfcc7decd65147fca38709c3fc2.png结合hostonly的判断逻辑, 我大概知道了。

7def0889f5409261a892e2d6eef787f0.png

大概就是我偷懒使用了单点登录的回调地址'bat.com/home'作为domain属性值,以为能自动解析出正常的domain。

实际上经历了【响应流中的Set-Cookie header 忽略cookie domain属性】---> 【hostonly判断逻辑】, 事情已经失控了,解决问题的办法也很明确,设置正确合法的domain属性值,就不会出现后续的幺蛾子,上线验证有效。


许久未更,见谅!码甲哥其实有很多内容想写,来日方长,与子同程。

本文记录了某web站点上线生产遇到的跨站点无法携带cookie问题,

  • 全面梳理了Cookie的疑难姿势

  • 顺势引出了hostonly这个有点意思的cookie属性

  • 希望本次的爬坑经历能给大家带来一点帮助

cd4e90da54762ede686261a3622fdd95.gif

实时通信技术大乱斗

SignalR 开发到生产部署闭坑指南

SignalR在React/Go技术栈的实践

●大前端快闪四:这次使用一个舒服的姿势插入HttpClient拦截器

●大前端快闪三:多环境灵活配置react

大前端快闪二:react开发模式 一键启动多个服务

大前端快闪:package.json文件知多少?

难缠的布隆过滤器,这次终于通透了

原创不易,点“赞”aff01be9fc015971ff5c70c8bf01a111.gif“在看”f5db5d9d79209e437ddfea975418d411.gif

体现态度很有必要!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有态度的马甲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值