一文带你了解 HTTP 黑科技(14)


一文带你了解 HTTP 黑科技

文章插图
 
这是使用 If-Match 或 If-Unmodified-Since标头实现的 。如果 Etag 与原始文件不匹配 , 或者自获取以来已对文件进行了修改 , 则更改为拒绝更新 , 并显示412 Precondition Failed错误 。
HTTP CookiesHTTP 协议中的 Cookie 包括 Web Cookie 和浏览器 Cookie , 它是服务器发送到 Web 浏览器的一小块数据 。服务器发送到浏览器的 Cookie , 浏览器会进行存储 , 并与下一个请求一起发送到服务器 。通常 , 它用于判断两个请求是否来自于同一个浏览器 , 例如用户保持登录状态 。
HTTP Cookie 机制是 HTTP 协议无状态的一种补充和改良
Cookie 主要用于下面三个目的
  • 会话管理
登陆、购物车、游戏得分或者服务器应该记住的其他内容
  • 个性化
用户偏好、主题或者其他设置
  • 追踪
记录和分析用户行为
Cookie 曾经用于一般的客户端存储 。虽然这是合法的 , 因为它们是在客户端上存储数据的唯一方法 , 但如今建议使用现代存储 API 。Cookie 随每个请求一起发送 , 因此它们可能会降低性能(尤其是对于移动数据连接而言) 。客户端存储的现代 API 是 Web 存储 API(localStorage 和 sessionStorage)和 IndexedDB 。
创建 Cookie当接收到客户端发出的 HTTP 请求时 , 服务器可以发送带有响应的 Set-Cookie 标头 , Cookie 通常由浏览器存储 , 然后将 Cookie 与 HTTP 标头一同向服务器发出请求 。可以指定到期日期或持续时间 , 之后将不再发送Cookie 。此外 , 可以设置对特定域和路径的限制 , 从而限制 cookie 的发送位置 。
Set-Cookie 和 Cookie 标头Set-Cookie HTTP 响应标头将 cookie 从服务器发送到用户代理 。下面是一个发送 Cookie 的例子
HTTP/2.0 200 OKContent-type: text/htmlSet-Cookie: yummy_cookie=chocoSet-Cookie: tasty_cookie=strawberry[page content]此标头告诉客户端存储 Cookie
现在 , 随着对服务器的每个新请求 , 浏览器将使用 Cookie 头将所有以前存储的 cookie 发送回服务器 。
GET /sample_page.html HTTP/2.0Host: www.example.orgCookie: yummy_cookie=choco; tasty_cookie=strawberryCookie 主要分为三类 , 它们是 会话Cookie、永久Cookie 和 Cookie的 Secure 和 HttpOnly 标记 , 下面依次来介绍一下
会话 Cookies上面的示例创建的是会话 Cookie  , 会话 Cookie 有个特征 , 客户端关闭时 Cookie 会删除 , 因为它没有指定Expires 或 Max-Age 指令 。这两个指令你看到这里应该比较熟悉了 。
但是 , Web 浏览器可能会使用会话还原 , 这会使大多数会话 Cookie 保持永久状态 , 就像从未关闭过浏览器一样
永久性 Cookies永久性 Cookie 不会在客户端关闭时过期 , 而是在特定日期(Expires)或特定时间长度(Max-Age)外过期 。例如
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;Cookie的 Secure 和 HttpOnly 标记安全的 Cookie 需要经过 HTTPS 协议通过加密的方式发送到服务器 。即使是安全的 , 也不应该将敏感信息存储在cookie 中 , 因为它们本质上是不安全的 , 并且此标志不能提供真正的保护 。
HttpOnly 的作用
  • 会话 cookie 中缺少 HttpOnly 属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的 cookie 信息 , 造成用户cookie 信息泄露 , 增加攻击者的跨站脚本攻击威胁 。
  • HttpOnly 是微软对 cookie 做的扩展 , 该值指定 cookie 是否可通过客户端脚本访问 。
  • 如果在 Cookie 中没有设置 HttpOnly 属性为 true , 可能导致 Cookie 被窃取 。窃取的 Cookie 可以包含标识站点用户的敏感信息 , 如 ASP.NET 会话 ID 或 Forms 身份验证票证 , 攻击者可以重播窃取的 Cookie , 以便伪装成用户或获取敏感信息 , 进行跨站脚本攻击等 。
Cookie 的作用域Domain 和 Path 标识定义了 Cookie 的作用域:即 Cookie 应该发送给哪些 URL 。
Domain 标识指定了哪些主机可以接受 Cookie 。如果不指定 , 默认为当前主机(不包含子域名) 。如果指定了Domain , 则一般包含子域名 。
例如 , 如果设置 Domain=mozilla.org , 则 Cookie 也包含在子域名中(如developer.mozilla.org) 。


推荐阅读