HTTP第17讲——Cookie机制

news2024/12/28 10:30:48

Cookie的诞生背景

HTTP 是“无状态”的,这既是优点也是缺点。优点是服务器没有状态差异,可以很容易地组成集群,而缺点就是无法支持需要记录状态的事务操作。
后来发明的 Cookie 技术,给 HTTP 增加了“记忆能力”。

什么是Cookie?

HTTP 的 Cookie 机制也是一样的道理,既然服务器记不住,那就在外部想办法记住。相当于是服务器给每个客户端都贴上一张小纸条,上面写了一些只有服务器才能理解的数据,需要的
时候客户端把这些信息发给服务器,服务器看到 Cookie,就能够认出对方是谁了。
(相当于:服务器给每个客户端打了标签!!!)

Cookie 的工作过程

当用户通过浏览器第一次访问服务器的时候,服务器肯定是不知道他的身份的。所以,就要创建一个独特的身份标识数据,格式是“key=value”,然后放进 Set-Cookie 字段里,随着响应报文一同发给浏览器。
浏览器收到响应报文,看到里面有 Set-Cookie,知道这是服务器给的身份标识,于是就保存起来,下次再请求的时候就自动把这个值放进 Cookie 字段里发给服务器。
因为第二次请求里面有了 Cookie 字段,服务器就知道这个用户不是新人,之前来过,就可以拿出 Cookie 里的值,识别出用户的身份,然后提供个性化的服务。
不过因为服务器的“记忆能力”实在是太差,一张小纸条经常不够用。所以,服务器有时会在响应头里添加多个 Set-Cookie,存储多个“key=value”。但浏览器这边发送时不需要用多个 Cookie 字段,只要在一行里用“;”隔开就行。
在这里插入图片描述
从这张图中我们也能够看到,Cookie 是由浏览器负责存储的,而不是操作系统。所以,它是“浏览器绑定”的,只能在本浏览器内生效。
如果你换个浏览器或者换台电脑,新的浏览器里没有服务器对应的 Cookie,就好像是脱掉了贴着纸条的衣服,“健忘”的服务器也就认不出来了,只能再走一遍 Set-Cookie 流程。

Cookie 的属性

Cookie 就是服务器委托浏览器存储在客户端里的一些数据,而这些数据通常都会记录用户的关键识别信息。所以,就需要在“key=value”外再用一些手段来保护,防止外泄或窃取,这些手段就是 Cookie 的属性。

Cookie 的生存周期

应该设置 Cookie 的生存周期,也就是它的有效期,让它只能在一段时间内可用,就像是食品的“保鲜期”,一旦超过这个期限浏览器就认为是 Cookie 失效,在存储里删除,也不会发送给服务器。
Cookie 的有效期可以使用 Expires 和 Max-Age 两个属性来设置。
“Expires”俗称“过期时间”,用的是绝对时间点,可以理解为“截止日期”(deadline)。“Max-Age”用的是相对时间,单位是秒,浏览器用收到报文的时间点再加上 Max-Age,就可以得到失效的绝对时间。
Expires 和 Max-Age 可以同时出现,两者的失效时间可以一致,也可以不一致,但浏览器会优先采用 Max-Age 计算失效期。

Cookie 的作用域

设置 Cookie 的作用域,让浏览器仅发送给特定的服务器和 URI,避免被其他网站盗用。
作用域的设置比较简单,“Domain”和“Path”指定了 Cookie 所属的域名和路径,浏览器在发送 Cookie 前会从 URI 中提取出 host 和 path 部分,对比 Cookie 的属性。如果不满足条件,就不会在请求头里发送 Cookie。

Cookie 的安全性

在 JS 脚本里可以用 document.cookie 来读写 Cookie 数据,这就带来了安全隐患,有可能会导致“跨站脚本”(XSS)攻击窃取数据。
属性“HttpOnly”会告诉浏览器,此 Cookie 只能通过浏览器 HTTP 协议传输,禁止其他方式访问,浏览器的 JS 引擎就会禁用 document.cookie 等一切相关的 API,脚本攻击也就无从谈起了。
另一个属性“SameSite”可以防范“跨站请求伪造”(XSRF)攻击,设置成“SameSite=Strict”可以严格限定 Cookie 不能随着跳转链接跨站发送,而“SameSite=Lax”则略宽松一点,允许 GET/HEAD 等安全方法,但禁止 POST 跨站发送。
还有一个属性叫“Secure”,表示这个 Cookie 仅能用 HTTPS 协议加密传输,明文的 HTTP协议会禁止发送。但 Cookie 本身不是加密的,浏览器里还是以明文的形式存在。

Cookie 的应用

身份识别

Cookie 最基本的一个用途就是身份识别,保存用户的登录信息,实现会话事务。
比如,你用账号和密码登录某电商,登录成功后网站服务器就会发给浏览器一个 Cookie,内容大概是“name=yourid”,这样就成功地把身份标签贴在了你身上。
之后你在网站里随便访问哪件商品的页面,浏览器都会自动把身份 Cookie 发给服务器,所以服务器总会知道你的身份,一方面免去了重复登录的麻烦,另一方面也能够自动记录你的浏览记录和购物下单(在后台数据库或者也用 Cookie),实现了“状态保持”。

广告跟踪

你上网的时候肯定看过很多的广告图片,这些图片背后都是广告商网站(例如 Google),它会“偷偷地”给你贴上 Cookie 小纸、条,这样你上其他的网站,别的广告就能用 Cookie 读出你的身份,然后做行为分析,再推给你广告。

这种 Cookie 不是由访问的主站存储的,所以又叫“第三方 Cookie”(third-party cookie)。如果广告商势力很大,广告到处都是,那么就比较“恐怖”了,无论你走到哪里它都会通过 Cookie 认出你来,实现广告“精准打击”。

小结

  1. Cookie 是服务器委托浏览器存储的一些数据,让服务器有了“记忆能力”;
  2. 响应报文使用 Set-Cookie 字段发送“key=value”形式的 Cookie 值;
  3. 请求报文里用 Cookie 字段发送多个 Cookie 值;
  4. 为了保护 Cookie,还要给它设置有效期、作用域等属性,常用的有 Max-Age、Expires、Domain、HttpOnly 等;
  5. Cookie 最基本的用途是身份识别,实现有状态的会话事务。

PS:本文是观看极客之后的笔记。

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

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

相关文章

图灵奖得主Geoffrey Hinton:我的五十年深度学习生涯与研究心法

本文介绍了Hinton非常坦诚地分享了自己的学术生涯,深度学习的未来和研究心得。 他从未正式上过计算机课程,本科在剑桥大学读的是生理学和物理学,期间曾转向哲学,但最终拿到的却是心理学方向的学士学位;他曾因为一度厌学…

在OK3588的Ubuntu系统上安装Firefox浏览器

文章目录 概要配置上网环境安装的具体命令 概要 因为Ubuntu系统里面没有安装浏览器,为了方便使用,提高工作效率,我们安装一下Firefox浏览器。 Firefox是一款适用于Ubuntu系统的免费和开源的Web浏览器。由Mozilla Foundation和其子公司Mozil…

818. 数组排序

链接: 链接 题目: 给定一个长度为 nn 的数组 aa 以及两个整数 ll 和 rr,请你编写一个函数,void sort(int a[], int l, int r),将 a[l]∼a[r]a[l]∼a[r] 从小到大排序。 输出排好序的数组 aa。 输入格式 第一行包含三个…

TiDB简述及TiKV的数据结构与存储 | 京东物流技术团队

1 概述 TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、…

景区导航小程序解决方案-便捷化游览体验

系统背景 景区导航小程序是一种基于移动设备的智能化导航系统,旨在为游客提供更加便捷、准确的导航服务。随着人们生活水平的提高,旅游业得到了快速发展,然而,在景区游览过程中,游客往往需要花费大量时间和精力来寻找…

Java- IO 及其相关面试题

目录 一、前言二、Java IO 概述输入和输出流2.1.1 定义2.1.2 代码示例 2.2 字节流和字符流2.2.1 定义2.2.2 代码示例 2.3 标准IO和NIO 三、字节流和字符流3.1. 字节流:InputStream和OutputStream3.1.1. FileInputStream和FileOutputStream3.1.2. ByteArrayInputStre…

【unity之IMGUI实践】单例模式管理面板对象【一】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

30页PPT,IPv6技术一次梳理清

上午好,我的网工朋友。 IPv6技术在以前的文章里,已经被老杨总说的很明白了:《都到2023年了,为啥IPv6还一直无法普及? 》 但是IPv6的过渡技术,好像一直没给你补上。 你知道IPv4向IPv6过渡的步骤有哪些吗&…

在B1中定义一个纯虚函数pvf(),重做练习1-4,并解释其结果

运行代码: //在B1中定义一个纯虚函数pvf(),重做练习1-4,并解释其结果。 #include"std_lib_facilities.h" //---------------------------------------------------------------------- //定义B1类。 class B1 { public:virtual vo…

《Linux运维总结:Centos7.6之OpenSSH9.0升级版本至9.3》

一、环境信息 说明:当前环境openssh版本为9.0p1,是从7.4p1版本直接升级上来的,先需要将9.0p1版本升级至9.3p1版本。如下所示,则为源ssh和目标ssh的信息。 -操作系统openssh版本openssh安装目录openssh安装方式openssl版本openssl…

你感到迷茫吗?【笔记】

你感到迷茫吗?【笔记】 前言推荐你感到迷茫吗?原通工19级-西电电院(电子信息雷达方向-专硕三年)原计科19级-西邮计院(软件工程方向-学硕三年)原计科19级-北京360(月薪-1w)现计科20级(考研:~~不公开处理~~ 物联网)对后来…

Jmeter 分布式压测,你的系统能否承受高负载?

‍你可以使用 JMeter 来模拟高并发秒杀场景下的压力测试。这里有一个例子,它模拟了同时有 5000 个用户,循环 10 次的情况‍。 请求默认配置 如果你想学习性能测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的性能测…

在电脑上如何调整照片kb大小?怎么压缩图片不改变清晰度?

当我们使用图片时,如果需要压缩图片大小该怎么处理?可以使用图片压缩工具在线操作的方法解决,今天就分享一款图片在线处理工具,打开浏览器即可完成图片压缩(https://www.yasuotu.com),下面是详细…

LLaMA模型指令微调 字节跳动多模态视频大模型 Valley 论文详解

Valley: Video Assistant with Large Language model Enhanced abilitY 大家好,我是卷了又没卷,薛定谔的卷的AI算法工程师「陈城南」~ 担任某大厂的算法工程师,带来最新的前沿AI知识和工具,包括AI相关技术、ChatGPT、AI绘图等&…

性能测试工具的重要性及其应用

在现代的软件开发过程中,性能测试是不可或缺的一环。性能测试旨在评估系统或应用程序在特定负载条件下的性能表现,帮助开发团队识别潜在的性能瓶颈和问题。而性能测试工具作为辅助工具,发挥着至关重要的作用。以下是性能测试工具的重要性及其…

vue 2.0 的使用

day01 1. Vue简介 一套用于构建用户界面的 <font colorred>渐进式框架</font> 2. 初识Vue 2.1 搭建Vue开发环境 第一步&#xff1a;去<a href"https://v2.cn.vuejs.org/">Vue2官网</a>&#xff0c;下载依赖包。 第二步&#xff1a;在 …

教你如何优雅的管理UDP接口——Python

设计思路主要参考了Flask框架&#xff0c;通过 route() 装饰器来告诉 UDE触发函数的 URL&#xff0c;通过蓝图接口进行分类管理。 ude.py 代码内容 import socket import msgpackclass UDE:def __init__(self):self.urls {}# 回调函数def Callback(self, packet):try:data …

vue中elementUI表单循环验证

进行验证的步骤 1、表单el-form 添加 :model"form" ref"form" :rules"rules"&#xff0c;注意是 :model"form"不是v-model&#xff0c;而后每个el-form-item绑定prop 2、不循环的示例在官网可看 3、循环表单的验证&#xff1a;3-1、e…

QT 之蓝牙编程

简介 使用PC蓝牙和蓝牙透传模块通讯。使用Android蓝牙和蓝牙透传模块通讯。 准备 QT core gui bluetoothQT蓝牙库相关头文件 #include <QtBluetooth/qbluetoothglobal.h> #include <QtBluetooth/qbluetoothlocaldevice.h> #include <qbluetoothaddre…

6.2.5 网络基本服务----动态主机配置协议DHCP

6.2.5 网络基本服务----动态主机配置协议DHCP 动态主机配置协议允许一台计算机加入新的网络时可自动获取网络配置信息&#xff0c;不用人工参与。连网的计算机需要配置的参数包括 IP地址子网掩码默认路由器的IP地址域名服务器IP地址 DHCP与DNS、FTP、Telnet一样也采用客户服…