cookie本质上也是请求头(即header),只是名为cookie
请求头不能有中文,所以cookie中也不能有中文,否则会报错Error: Invalid character in header content ["Cookie"]
cookie有长度限制,各浏览器长度限制不一样,所以较长的内容一般放在Local Storage

同一个域下的cookie数量也有限制
前端调用后端接口时,默认会把接口的域及父域下的cookie传给后端。
比如接口的域是mall.crazyboy.com,父域是crazy.com,默认会把mall.crazyboy.com和crazy.com这两个域下的cookie传给后端
cookie默认上传的这个特性,有时候会导致问题。
本菜遇到过一次请求异常,参数检查没问题,就是因为传了多余的cookie。
下图为使用postman时,查看/编辑默认上传的cookie

使用cookie或其他请求头传token有什么区别
有的浏览器禁用cookie,只能在其他请求头(比如Authorization)传token,所以后端拦截器一般会同时在cookie和特定请求头中检查token

为什么不全都用其他请求头传token
有些场景无法指定请求头,比如img标签,<img src='xxx'></img>这种方式请求图片,无法指定请求头,只能利用cookie默认上传的特性,携带token
chrome控制台cookie的Expires/Max-age是用UTC时间展示,所以会比实际时间早8小时,下图的cookie实际过期时间是17:44:20,所以我们对cookie设置expires的时候,也要用UTC时间

关于GMT UTC CST等时间格式,详见https://www.jianshu.com/p/7acb500ec572
chrome可以手动添加cookie,并且可以设置domain(正常来说无法跨域写cookie),做爬虫功能时可能需要这样操作

cookie的HttpOnly属性可以增加安全性,HttpOnly为true时,该cookie不能通过js代码获取,只有在发起请求的时候自动带上。
比如下图的SESSION,request headers中可以看到,但是document.cookie无法获取


cookie与localStorage,cookie会自动携带到后端,localStorage则不会。
可以把部分数据放在localStorage,按需携带,提高安全性。
网友评论