HTTP Cookie的工作方式是什么?相比token有啥好处?¶
HTTP Cookie的工作方式¶
Cookie的原理非常简单,服务器端通过响应中的Set-Cookie
头来创建cookie,客户端(浏览器)将该cookie保存在本地,并在接下来的请求里通过Cookie
头带上该cookie。
一个经典的cookie使用场景就是登录状态的保持。以下是一个典型的流程:
- 客户端第一次访问服务器端的接口/页面,在此时客户端显然是没有cookie的。
- 服务器端根据客户端传入的用户名密码等参数,识别出用户信息,并在响应头(response header)中设置了一个名为session_id的cookie,比如:
Set-Cookie: session_id=123; path=/
。 - 客户端在本地记录该session_id,并在之后的所有请求里都带上这个cookie。请求头就是
Cookie: session_id=123
。 - 服务器端根据客户端传入的
Cookie
头,就知道了客户端的session_id,进而知道客户端是哪个用户。
Cookie相比token有啥好处?¶
现在,很多新网站、手机客户端都喜欢用token来做身份认证,而不是cookie。一个常见的例子就是,基于JWT的API认证。客户端先调用一个认证API,拿到JWT token,然后在后续请求里,通过Authorization头带上JWT token,比如 Authorization: Bearer MY_JWT
。
看上去,两者都可以达成“保持登录状态”的效果,那么两者有啥区别?
实际上,cookie(中的session_id)和token的本质区别是:
- cookie由服务器端控制,客户端(浏览器)只是被动地接受服务器端的操作(对cookie的增删改查)
- token由客户端控制,服务器端没办法直接控制客户端的token。
所以,在非SPA的传统网站上,cookie的使用更加常见。毕竟传统网站的前端通常比较弱,大多功能都是由服务器端控制。
本文为kyleblog.cn原创,转载请注明出处:https://www.kyleblog.cn/posts/http_cookie
发布日期:2023-02-01
联系作者