# Cache、Cookie、Session、Token
# 协议是什么
在接口测试中,客户端发送的 request
至服务端反馈的 response
中传输的数据就是接口测试最重要的部分
# Cache
是什么
打开浏览器或者应用的时候,用户的等待时间叫做响应时间,打开速度影响到用户体验,提高反应速度的一个方法就是使用缓存策略,缓存策略能带来什么好处呢?
-
减少延迟:因为网页请求指向的是更接近的客户端缓存,而不是资源服务器,所以花费的时间更短,提高用户体验
-
降低网络负荷:因为缓存可以重复使用,节省带宽,降低网络负荷,也就可以更加节省用户的流量
缓存一般分为以下几种:
-
浏览器缓存
(缓存在本地) -
代理缓存
(缓存在网络路由,也就是共享缓存) -
网关缓存
(缓存在 CDN)
# 缓存策略一般分两种情况:
-
强缓存 (直接在本地缓存中读取资源)
-
协商缓存 (通过服务器告知是否能用本地缓存,先和服务器协商,如果可以,就从本地缓存中读取。如果不可以,就返回最新的资源)
# Cookie
Cookie
的内容是保存一小段文本信息。组成一个通行证,用来处理客户端无状态协议的一种解决方案
Cookie
使用原理如下:
-
用户会提供信息提交给服务器
-
服务端向客户端回传相应数据的同时,也会发回
Cookie
-
客户端接收到服务器相应后,浏览器将
Cookie
保存在同一个位置 -
客户端向服务端发送请求的实话,会把
Cookie
再次发回服务端
# 获取 Cookie
的途径
-
浏览器自带的开发工具或者抓包工具
(Fiddler,Charles)
-
本地获取(
ie
的路径为C
盘appdata/Microsoft/Windows/Cookies,Firefox位于C盘appdata/Mozilla/Firefox/Profiles,Charome位于C盘appdata/Goole/Chrome/User Date /Default)
-
js
代码查看 (浏览器地址栏输入Javascript:alert(document.cookie)
)
# Session
是什么
Session
是另外一种记录用户状态的机制,不同于 Cookie
的是 Session
是保存在服务器上,用来解决服务端对无状态协议
Session
的传输步骤
-
服务端创建
Session
,并创建唯一的id
-
服务器将
id
发给客户端 -
客户端再次发送请求的实话带上
Session
的id
-
服务器接收到请求后根据
Seesion
的id
找到相应的Session
,完成相应
# Session
的传输媒介
-
通过
Cookie
传输 -
通过
URL
地址重写
很多同学不知道
Session
和Cookie
的区别,那么我来大概讲解一下我理解的
-
存储位置不同:大多数情况
Cookie
存储在浏览器,Session
存储在服务器 -
存储容量不同:单个
Cookie
保存的数据不得超过4kb
,一个站点最多20
个Cookie
,Session
一般情况下没有上限,不过建议不要存放太多东西影响性能 -
存取方式不同:
Cookie
只能用ASCII
字符串。通过编码方式获取Unicode
字符或者二进制
数据。不好存储复杂的信息,Session
能存储任何类型的数据 -
隐私策略不同:
Cookie
放在客户端,可以进行Cookie
欺骗,所以不安全。Session
放在服务端,更加安全 -
有效期不同:
Cookie
可以设置属性达到长期有效,Session
依赖于JSESSIONID
的Cookie
,Cookie JSESSIONID
的过期时间默认为-1
,只需要关闭窗口Session
就会失效,,就算不依赖Cookie
,
用
UrL
重写也不能完成,如果Session
超时时间过长,容易导致内存溢出
- 服务器压力不同:
Cookie
保存子本地。不存在服务端压力。Session
保存在服务端,每个用户产生一个Session
,并发过多非常占用内存
7. 浏览器支持不同:如果浏览器禁用 Cookie
,那么 Cookie
直接失效。 Session
比较好点。可以用 URL
重写
8. 跨域不同: Cookie
支持跨域访问, Session
不支持跨域
# Token
是什么:
-
当客户端第一次请求的实话,发送用户信息到服务端,服务器对用户信息使用
HSA256
算法以及密钥进行签名,再将这个签名和数据一次作为Token
返回给客户端 -
服务端不保存
Token
,客户端保存Token
-
客户端再次请求的实话,将
Token
发送给服务端 -
服务端同样用
HSA256
算法和同样的密钥对数据再一次计算签名,和Token
中的签名做比较(如果相同,直接登录,不相同,登录失败)