KyleBlog.cn 文章 标签 关于
文章 标签 关于

HTTP Cookie的工作方式是什么?相比token有啥好处?

HTTP Cookie的工作方式

Cookie的原理非常简单,服务器端通过响应中的Set-Cookie头来创建cookie,客户端(浏览器)将该cookie保存在本地,并在接下来的请求里通过Cookie头带上该cookie。

一个经典的cookie使用场景就是登录状态的保持。以下是一个典型的流程:

  1. 客户端第一次访问服务器端的接口/页面,在此时客户端显然是没有cookie的。
  2. 服务器端根据客户端传入的用户名密码等参数,识别出用户信息,并在响应头(response header)中设置了一个名为session_id的cookie,比如:Set-Cookie: session_id=123; path=/
  3. 客户端在本地记录该session_id,并在之后的所有请求里都带上这个cookie。请求头就是Cookie: session_id=123
  4. 服务器端根据客户端传入的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 联系作者