我正在編寫一個 PHP 類來處理/解析Cookie和Set-CookieHTTP 標頭以在我的自定義用戶代理(爬蟲、抓取工具、機器人等)中使用它,在測試它時我發現它的行為與 Firefox 在他們處理標頭中的Path屬性的方式Set-Cookie。我回到了RFC 6265,我是對的###如何重現?在任何 PHP 文件中設置這一行并請求它<?phpheader("set-cookie: foo=1; path=/bar/", true);exit;現在/bar用 Firefox請求,你會看到 Firefox 正在發送 cookie,而它應該只/bar/根據規范發送到或更長的路徑!###規格是什么?我將引用RFC 6265 5.1.4 Paths and Path-Match 中的相關部分如果至少滿足以下條件之一,則請求路徑路徑匹配給定的 cookie 路徑:o cookie-path 和 request-path 是相同的。o cookie-path 是請求路徑的前綴,cookie-path 的最后一個字符是 %x2F ("/")。o cookie-path 是請求路徑的前綴,請求路徑的第一個不包含在 cookie-path 中的字符是 %x2F(“/”)字符。在這種情況下,請求路徑/bar和 cookie 路徑/bar/不匹配###Google Chrome 怎么樣?谷歌瀏覽器不會將 cookie 發送給/bar??我的問題誰是對的?鉻合金 ?還是火狐?###額外細節:我在 Linux 上的 Firefox 66.0.4 和 Chrome 版本 76.0.3809.132 Linux 上進行了測試這是我在課堂上使用的相關函數public static function isPathMatch(string $requestPath, string $cookiePath){ if ($requestPath === $cookiePath) return true; if (strpos($requestPath, $cookiePath) !== 0) return false; if (substr($cookiePath, strlen($cookiePath) - 1, 1) === "/") return true; if (substr($requestPath, strlen($cookiePath), 1) === "/") return true; return false;}這是我為 Firefox找到的第二個問題,但它仍然是我最喜歡的瀏覽器 :)感謝@fendall 關于 RFC 的評論,我跟蹤了與此問題相關的 RFC1997 年 2 月RFC 2109歷史。被淘汰2000 年 10 月RFC 2965歷史。被淘汰2011 年 4 月RFC 6265建議標準,如果獲得批準將被廢棄2017 年 8 月草案-ietf-httpbis-rfc6265bis-02互聯網草案該MDN的Set-Cookie文件使用這兩種規格RFC 6265和草案,IETF-httpbis-rfc6265bis-02和兩種規格幾乎是“路徑和路徑-匹配”部分中的相同。(我在問題中引用的部分)我向 Bugzilla 報告了一個錯誤https://bugzilla.mozilla.org/show_bug.cgi?id=1579552
1 回答

呼如林
TA貢獻1798條經驗 獲得超3個贊
是的,Chrome 是對的,正如ehsan akhgari在錯誤報告中所評論的那樣
...他們更改了 Firefox 的源代碼并修復了它https://phabricator.services.mozilla.com/D45427
- 1 回答
- 0 關注
- 343 瀏覽
添加回答
舉報
0/150
提交
取消