透视 HTTP 协议
罗剑锋(Chrono)
前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者
63943 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
开篇词 (1讲)
透视 HTTP 协议
15
15
1.0x
00:00/00:00
登录|注册

19 | 让我知道你是谁:HTTP的Cookie机制

2. Cookie的好处已经很清楚了,你觉得它有什么缺点呢?
1. 如果Cookie的Max-Age属性设置为0,会有什么效果呢?
Secure
SameSite
HttpOnly
Path
Domain
Max-Age
Expires
广告跟踪
身份识别
安全性
作用域
生存周期
Cookie字段
Set-Cookie字段
广告跟踪
身份识别
记忆能力
无法支持需要记录状态的事务操作
可以很容易地组成集群
服务器没有状态差异
课下作业
Cookie的应用
Cookie的属性
Cookie的工作过程
Cookie的作用
缺点
优点
HTTP的Cookie机制

该思维导图由 AI 生成,仅供参考

在之前的第 13 讲第 14 讲中,我曾经说过,HTTP 是“无状态”的,这既是优点也是缺点。优点是服务器没有状态差异,可以很容易地组成集群,而缺点就是无法支持需要记录状态的事务操作。
好在 HTTP 协议是可扩展的,后来发明的 Cookie 技术,给 HTTP 增加了“记忆能力”。

什么是 Cookie?

不知道你有没有看过克里斯托弗·诺兰导演的一部经典电影《记忆碎片》(Memento),里面的主角患有短期失忆症,记不住最近发生的事情。
00:00 / 00:00
    1.0x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00
    比如,电影里有个场景,某人刚跟主角说完话,大闹了一通,过了几分钟再回来,主角却是一脸茫然,完全不记得这个人是谁,刚才又做了什么,只能任人摆布。
    这种情况就很像 HTTP 里“无状态”的 Web 服务器,只不过服务器的“失忆症”比他还要严重,连一分钟的记忆也保存不了,请求处理完立刻就忘得一干二净。即使这个请求会让服务器发生 500 的严重错误,下次来也会依旧“热情招待”。
    如果 Web 服务器只是用来管理静态文件还好说,对方是谁并不重要,把文件从磁盘读出来发走就可以了。但随着 HTTP 应用领域的不断扩大,对“记忆能力”的需求也越来越强烈。比如网上论坛、电商购物,都需要“看客下菜”,只有记住用户的身份才能执行发帖子、下订单等一系列会话事务。
    确认放弃笔记?
    放弃后所记笔记将不保留。
    新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
    批量公开的笔记不会为你同步至部落
    公开
    同步至部落
    取消
    完成
    0/2000
    荧光笔
    直线
    曲线
    笔记
    复制
    AI
    • 深入了解
    • 翻译
      • 英语
      • 中文简体
      • 中文繁体
      • 法语
      • 德语
      • 日语
      • 韩语
      • 俄语
      • 西班牙语
      • 阿拉伯语
    • 解释
    • 总结

    HTTP的Cookie机制赋予了HTTP协议“记忆能力”,通过在浏览器和服务器之间传递“小纸条”(即Cookie),实现了用户身份识别和个性化服务。文章介绍了Cookie的工作过程,包括响应头字段Set-Cookie和请求头字段Cookie的传递,以及Cookie的属性设置,如有效期、作用域和安全性。通过详细解释,读者可以快速了解HTTP的Cookie机制,以及如何在实际应用中设置和管理Cookie。此外,文章还探讨了Cookie的应用,包括身份识别和广告跟踪等常见用途。尽管现在出现了多种Local Web Storage技术,但Cookie仍然是最通用、兼容性最强的客户端数据存储手段。文章提供了小结和课下作业,帮助读者加深对Cookie的理解,并鼓励他们参与讨论和分享。

    仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
    《透视 HTTP 协议》
    新⼈⾸单¥59
    立即购买
    登录 后留言

    全部留言(72)

    • 最新
    • 精选
    • 徐海浪
      1. 如果 Cookie 的 Max-Age 属性设置为 0,会有什么效果呢? 设置为0,服务器0秒就让Cookie失效,即立即失效,服务器不存Cookie。 2. Cookie 的好处已经很清楚了,你觉得它有什么缺点呢? 好处:方便了市民 缺点:方便了黑客:)

      作者回复: √

      2019-07-10
      4
      48
    • 放开那个猴子
      广告追踪没看明白呀,能否详细讲讲

      作者回复: 是这样的,网站的页面里会嵌入很多广告代码,里面就会访问广告商,在浏览器里存储广告商的cookie。 你换到其他网站,上面也有这个广告商的广告代码,因为都是一个广告商网站,自然就能够读取之前设置的cookie,也就获得了你的信息。

      2019-07-10
      14
      36
    • Geek_66666
      既然max-age=0会立即失效,那不就等于无记忆了?那干嘛还用cookie?

      作者回复: max-age=0是指不能缓存,但在会话期间是可用的,浏览器会话关闭之前可以用cookie记录用户的信息。

      2019-08-15
      2
      28
    • 前端西瓜哥
      1. (我修改 Lua 文件测试了一下)如果 Max-Age 设置为0,浏览器中该 Cookie 失效,即便这个 Cookie 已存在于浏览器中,且尚未过期。另外 Web 应用开发中,可以通过这种方式消除掉用户的登陆状态,此外记得在服务器的 session 中移除该 cookie 和其对应的用户信息。 2. Cookie 的缺点: (1) 不安全。如果被中间人获取到 Cookie,完全将它作为用户凭证冒充用户。解决方案是使用 https 进行加密。 (2)有数量和大小限制。另外 Cookie 太大也不好,传输的数据会变大。 (3)客户端可能不会保存 Cookie。比如用 telnet 收发数据,用户禁用浏览器 Cookie 保存功能的情况。

      作者回复: good。

      2019-07-11
      24
    • 饭饭
      Max-age:-1 的时候会永久有效吧 ?

      作者回复: rfc里有说明,如果max-age <=0,统一按0算,立即过期。

      2019-07-10
      18
    • WL
      对于XSS和XSRF一直不是很理解希望老师帮忙解答一下: 1. XSS攻击是指第三方的JS代码读取到浏览器A网站的Cookie然后冒充我去访问A网站吗? 2.XSRF是指浏览器从A网站跳转到B网站是会带上A网站的Cookie吗?这个不是由Domain和Path已经限定了吗?

      作者回复: 1,是的。 2.你理解的反了,应该是带上B网站的cookie。 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies 这个链接里举的例子也许能够帮助你理解。

      2019-07-10
      3
      16
    • rongyefeng
      还有一个属性叫“Secure”,表示这个 Cookie 仅能用 HTTPS 协议加密传输,明文的 HTTP 协议会禁止发送。 但 Cookie 本身不是加密的,浏览器里还是以明文的形式存在。 这里的“ Cookie 本身”怎么理解?

      作者回复: 意思是cookie在传输过程是被https加密的,不能用明文的http传输,但在本地,它还是明文,没有被加密,还是能够被任意查看。

      2020-05-28
      13
    • 业余草
      属性“HttpOnly”、“Secure”、“SameSite”很少见,老师可以给几个配套例子,后面答疑篇,可以来个攻防实战!

      作者回复: 其实并不少见,上几个大站,用开发者工具看看就能看到。

      2019-07-10
      2
      11
    • cp3yqng
      域名+路径的方式存储cookie,感觉像只有一台业务服务器,那后台如何过分布式系统呢,用户中心是一个系统,核心业务是其他的系统,这里cookie肯定要共享,应该有一级域名和二级域名等等的概念吧,麻烦老师在解释解释。我本人是做移动端开发的,都是自己把token写在网络底层的请求头中,其实核心思想是一样的,但是缺点就是所有的域名里面都带token,这样也不好,好像还有优化的空间。

      作者回复: 只要cookie设置了domain和path属性,浏览器在访问uri时就会根据这两个属性有选择地发送cookie。 需要根据自己的业务需求,恰当设置cookie的作用域,太大太小都不好。

      2019-07-10
      6
    • 大小兵
      要是能把session和token也说一下就好了

      作者回复: 这个不在http范围之内,而且篇幅有限,还望见谅。

      2019-07-10
      2
      6
    收起评论
    显示
    设置
    留言
    72
    收藏
    沉浸
    阅读
    分享
    手机端
    快捷键
    回顶部