Bootstrap

那些HTTP你不知道的事

  1. HTTP是一个无状态的协议
  2. Cookie的存在是为了解决客户端与服务端会话状态的问题,这个状态指后端服务的状态而非通讯协议的状态
  3. Cookie是指某些网站为了辨别用户身份儿储存在用户本地终端上的数据
    Cookie的设置
  • 客户端向服务器发送HTTP请求
  • 服务器收到HTTP请求时,在响应头里面添加一个Set-Cookie字段
  • 浏览器收到响应后保存下Cookie
  • 之后的浏览器发送每一次请求,服务器都会通过Cookie字段将存储的Cookie信息发送给服务器
    Cookie的一些属性
  • Expires用来设置Cookie的过期时间
    • 当Expires属性缺少时或值为Session代表是会话性Cookie,值保存在客户端内存中,当浏览器关闭时失效
    • 相对于会话Cookie而言的时持久性Cookie,值保存在用户的硬盘中,直到过期或主动清除才会失效
  • Max-Age用来设置在Cookie失效前需要经过的秒数
    • Max-Age可以为正数、负数、0
    • 正数代表浏览器会将其持久化,即写到对应的Cookie文件中
    • 负数代表Cookie是一个会话性Cookie
    • 0代表会立即删除这个Cookie
    • 当Expires和Max-Age同时存在,Max-Age优先级更高
  • Domain指定了Cookie可以送达的主机名
    • 不能跨域设置Cookie
  • Path指定了一个URL路径
    • 这个路径必须出现在要请求的资源的路径中才可以发送Cookie首部
    • Domain和Path表示共同定义了Cookie的作用域,即Cookie应该发送给哪些URL
  • Secure属性
    • 标记为Secure的Cookie只应通过被HTTPS协议加密过的请求发送给服务端
    • 可以保护 Cookie 在浏览器和 Web 服务器间的传输过程中不被窃取和篡改。
  • HTTPOnly
    • 设置HTTPOnly属性可以防止客户端脚本通过document.cookie等方式访问Cookie,有助于避免XSS攻击
  • SameSite
    • Chrome80版本默认屏蔽了第三方的Cookie,SameSite属性可以让Cookie在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)
  • SameSite 可以有下面三种值
  1. Strict 仅允许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 完全一致。
  2. Lax 允许部分第三方请求携带 Cookie
  3. None 无论是否跨站都会发送 Cookie
    之前默认是 None 的,Chrome80 后默认是 Lax
    跨站和跨域
  • 跨站(Cross-site)/同站(same-site)=== 第三方(third-party)/第一方(first-party)
  • 同源策略(SOP)中的同源(same-origin)/跨域(cross-origins)
  • 同源策略的同源是指2个URL的协议/主机名/端口一致
  • TLD(Top-Level-Domain)顶级域名
  • eTLD(effective Top-Level-Domain)有效顶级域名,注册在Mozilla维护的公共后缀列表(Public Suffix List)中
  • eTLD+1:有效顶级域名+二级域名,来判断是否是一个站点,只要2个URL的eTLD+1相同就是【同站】
    Cookie的作用
  • 会话状态管理(用户登录状态、购物车、游戏分数或其他需要记录的信息)
  • 个性化设置(用户自定义设置、主题)
  • 浏览器行为跟踪
    Cookie的缺点
  • 大小、安全、增加请求大小等方面
;