HTTP Cookie的域名和路徑匹配

介紹

本文主要經過整理RFC6265 - HTTP State Management Mechanism文檔的域名和路徑匹配章節,而後加以實驗驗證,最後梳理出一些技術要點,僅供你們參考。html

Domain Matching

假設request_domain爲請求域名,cookie_domain爲cookie的domain屬性,若是request_domain和cookie_domain以點"."結尾,則先將尾部的點"."移除。 若是request_domain和cookie_domain知足如下任一個條件,則稱request_domain和cookie_domain匹配:
** 1. request_domain和cookie_domain是同級域名,而且相等 **api

  • request_domain(www.google.com)和cookie_domain(www.google.com)匹配

** 2. request_domain和cookie_domain不一樣級,而且cookie_domain是request_domain的後綴 **瀏覽器

  • request_domain(www.google.com)和cookie_domain(google.com)匹配
  • request_domain(www.google.com)和cookie_domain(.google.com)匹配
  • request_domain(img.static.google.com)和cookie_domain(static.google.com)匹配

cookie_domain(google.com)和cookie_domain(.google.com)匹配全部子域名cookie

不匹配示例:dom

  • request_domain(google.com)和cookie_domain(www.google.com)不匹配
  • request_domain(abc.google.com)和cookie_domain(c.google.com)不匹配

Path Matching

假設request_path爲請求路徑,cookie_path爲cookie的path屬性。 若是cookie_path和request_path知足如下任一個條件,則稱cookie_path和request_path匹配:
** 1. cookie_path和request_path是同級路徑,而且相等 **google

  • request_path(/)和cookie_path(/)
  • request_path(/a)和cookie_path(/a)

** 2. cookie_path和request_path不是同級路徑,而且cookie_path是request_path的前綴 **htm

  • request_path(/a)和cookie_path(/)
  • request_path(/a/b)和cookie_path(/a)

cookie_path(/)匹配全部request_path文檔

不匹配示例:get

  • request_path(/a)和cookie_path(/a/)
  • request_path(/ab)和cookie_path(/a)

Set-Cookie

假設當前請求的域名是request_domain, 響應中Set-Cookie的域名是cookie_domain,路徑是cookie_path,則:域名

  • 若是cookie_domain未指定,則默認爲request_domain。
  • 若是cookie_path未指定,則默認爲/。
  • request_domain必須匹配cookie_domain,不然瀏覽器會丟棄該Set-Cookie
    例如request_domain(www.google.com)的響應中包含一個Set-Cookie,其cookie_domain爲api.google.com,則瀏覽器會丟棄該Set-Cookie。

Cookie能夠跨端口共享嗎?

能夠的,只要同時知足Domain Match和Path Match便可。

參考文檔

相關文章
相關標籤/搜索