什么是Cookie
为了解释CSRF与SameSite的成因、关系与历史,我们首先需要对Cookie有一个基础的了解。
我们知道,HTTP请求本身是无状态的,正常来说,服务端收到请求后并不知道请求者是谁;
所以为了记录用户的标识信息,来提供更好更便捷的网络服务,Cookie应运而生。
就好像我们使用ATM服务(HTTP服务)一样,没有插入银行卡(Cookie)之前,机器并不知道面前的人是谁,有多少余额,甚至不让你使用大部分的功能;但是当你插入之前银行发售(SetCookie)给你的银行卡(Cookie)之后,ATM服务(HTTP服务)就能够认识你,并提供针对你的服务。
如图,可以看到大家[耳]熟能详的Cookie数据流过程。
- 首先,用户在浏览器中请求目标网站,请求内容是自己的身份信息(比如登录或者注册)。
- 服务收到用户信息后,会在这个HTTP请求的返回中给浏览器SetCookie的指令,并带上一串能够代表这个用户的id(银行卡号),浏览器收到SetCookie后,会将这个网站id在浏览器中进行存储。
- 当用户再次请求这个网站的其他HTTP服务时(比如获取购买记录),浏览器会自动检测本地Cookie中的id并自动添加到请求内容中。
- 这样,HTTP服务端收到这个请求的同时也会收到Cookie信息,通过查询后台数据便可得知这个用户的信息,返回针对这个用户的数据。
所以,Cookie是浏览器用来存储用户在各个网站的用户标识信息,是一系列小而碎的数据块(银行卡号),就好像碎饼干(Cookie)一样。