# Cache、Cookie、Session、Token

# 协议是什么

在接口测试中,客户端发送的 request 至服务端反馈的 response 中传输的数据就是接口测试最重要的部分

# Cache 是什么

打开浏览器或者应用的时候,用户的等待时间叫做响应时间,打开速度影响到用户体验,提高反应速度的一个方法就是使用缓存策略,缓存策略能带来什么好处呢?

  1. 减少延迟:因为网页请求指向的是更接近的客户端缓存,而不是资源服务器,所以花费的时间更短,提高用户体验

  2. 降低网络负荷:因为缓存可以重复使用,节省带宽,降低网络负荷,也就可以更加节省用户的流量

缓存一般分为以下几种:

  1. 浏览器缓存    
    (缓存在本地)

  2. 代理缓存     
    (缓存在网络路由,也就是共享缓存)

  3. 网关缓存     
    (缓存在 CDN)

# 缓存策略一般分两种情况:

  1. 强缓存    (直接在本地缓存中读取资源)

  2. 协商缓存   (通过服务器告知是否能用本地缓存,先和服务器协商,如果可以,就从本地缓存中读取。如果不可以,就返回最新的资源)

Cookie 的内容是保存一小段文本信息。组成一个通行证,用来处理客户端无状态协议的一种解决方案

Cookie 使用原理如下:

  1. 用户会提供信息提交给服务器

  2. 服务端向客户端回传相应数据的同时,也会发回 Cookie

  3. 客户端接收到服务器相应后,浏览器将 Cookie 保存在同一个位置

  4. 客户端向服务端发送请求的实话,会把 Cookie 再次发回服务端

# 获取 Cookie 的途径

  1. 浏览器自带的开发工具或者抓包工具 (Fiddler,Charles)

  2. 本地获取( ie 的路径为 Cappdata/Microsoft/Windows/Cookies,Firefox位于C盘appdata/Mozilla/Firefox/Profiles,Charome位于C盘appdata/Goole/Chrome/User Date /Default)

  3. js 代码查看 (浏览器地址栏输入 Javascript:alert(document.cookie) )

# Session 是什么

Session 是另外一种记录用户状态的机制,不同于 Cookie 的是 Session 是保存在服务器上,用来解决服务端对无状态协议

Session 的传输步骤

  1. 服务端创建 Session ,并创建唯一的 id

  2. 服务器将 id 发给客户端

  3. 客户端再次发送请求的实话带上 Sessionid

  4. 服务器接收到请求后根据 Seesionid 找到相应的 Session ,完成相应

# Session 的传输媒介

  1. 通过 Cookie 传输

  2. 通过 URL 地址重写

很多同学不知道 SessionCookie 的区别,那么我来大概讲解一下我理解的

  1. 存储位置不同:大多数情况 Cookie 存储在浏览器, Session 存储在服务器

  2. 存储容量不同:单个 Cookie 保存的数据不得超过 4kb ,一个站点最多 20CookieSession 一般情况下没有上限,不过建议不要存放太多东西影响性能

  3. 存取方式不同: Cookie 只能用 ASCII 字符串。通过编码方式获取 Unicode 字符或者 二进制 数据。不好存储复杂的信息, Session 能存储任何类型的数据

  4. 隐私策略不同: Cookie 放在客户端,可以进行 Cookie 欺骗,所以不安全。 Session 放在服务端,更加安全

  5. 有效期不同: Cookie 可以设置属性达到长期有效, Session 依赖于 JSESSIONIDCookieCookie JSESSIONID 的过期时间默认为 -1 ,只需要关闭窗口 Session 就会失效,,就算不依赖 Cookie

UrL 重写也不能完成,如果 Session 超时时间过长,容易导致内存溢出

  1. 服务器压力不同: Cookie 保存子本地。不存在服务端压力。 Session 保存在服务端,每个用户产生一个 Session ,并发过多非常占用内存

7. 浏览器支持不同:如果浏览器禁用 Cookie ,那么 Cookie 直接失效。 Session 比较好点。可以用 URL 重写

8. 跨域不同: Cookie 支持跨域访问, Session 不支持跨域

# Token 是什么:

  1. 当客户端第一次请求的实话,发送用户信息到服务端,服务器对用户信息使用 HSA256 算法以及密钥进行签名,再将这个签名和数据一次作为 Token 返回给客户端

  2. 服务端不保存 Token ,客户端保存 Token

  3. 客户端再次请求的实话,将 Token 发送给服务端

  4. 服务端同样用 HSA256 算法和同样的密钥对数据再一次计算签名,和 Token 中的签名做比较(如果相同,直接登录,不相同,登录失败)

Edited on Views times