如果服务器省略 Path 属性,则用户代理将使用 request-uri 路径组件的“目录”作为默认值。
虽然它谈论的是
Set-Cookie
的事情,但它也适用于 document.cookie
API。要验证这一点,可以在 Chrome 上打开新选项卡并输入“https://github.com/pulls/review-requested”。网页加载完成后,打开开发控制台,输入以下代码并输入:
document.cookie = "mycookie=114514"
开发控制台中的应用程序选项卡显示 cookie 是使用路径“/pulls”创建的,这正是 RFC6265 中提到的。但如果涉及到SPA就显得有点复杂了(虽然github确实是用react写的)。让我们按照以下步骤操作:
document.cookie = "mycookie=114514"
并检查应用程序选项卡中的值。此时,创建的 cookie 的根路径为“/”,即使 Chrome 的地址栏填满了 https://github.com/pulls/review-requested .
这似乎与 RFC6265 不同。我在 Firefox 上尝试过,它的行为与 Chrome 相同。我无法弄清楚以下问题:
document.cookie
API 计算或处理 cookie 的缺失路径属性?从理论上讲,它在规格范围内工作。正如您所指出的,浏览器将设置 request-uri 的 路径组件的路径。由于浏览器没有发出 SPA 请求,因此请求 uri 的路径组件仍然是 '/'。
这具有安全性优势,例如,此逻辑将使 XSS 攻击无法使用 History API 来更改路径并获取对当前路径之外的 cookie 的访问权限。