我在这里遗漏了什么还是 CookieContainer 中的错误?
我将 3 个 cookie 添加到容器中,然后为 2 个 url 调用 GetCookieHeader 函数:
CookieContainer cc = new CookieContainer();
cc.Add(new Cookie("Cookie1", "1", "/a", "test.com"));
cc.Add(new Cookie("Cookie2", "2", "/a/0/", "test.com"));
cc.Add(new Cookie("Cookie3", "3", "/a/1/", "test.com"));
var result1 = cc.GetCookieHeader(new Uri("http://test.com/a/1/list"));
Assert.AreEqual("Cookie3=3; Cookie1=1", result1);
var result2 = cc.GetCookieHeader(new Uri("http://test.com/a/0/list"));
Assert.AreEqual("Cookie2=2; Cookie1=1", result2);
问题是最后一个引发异常的断言,因为返回的标头只有“Cookie2 = 2”。我看不出有什么理由省略 Cookie1 cookie - 根据 RFC6265,它应该返回两个类似于上面第一个断言的 cookie,不是吗?
几点说明:
cookie 都在容器中,所以问题不是添加,而是 GetHeader 函数。
添加 4、5 等 cookie 时,此行为保持不变:只有与最后添加的 cookie 匹配的路径才会包含基本路径的 cookie!
当删除路径中的所有“a”并仅使用“/”、“/0/”和“/1/”作为 3 个 cookie 和“ http://test.com/1/list ”的路径时,行为会发生变化和断言网址中的“ http://test.com/0/list ”)。然后所有断言都会成功 - 我希望“a”具有相同的行为!
PS:让我从规范中添加相关部分:
如果至少满足以下条件之一,则请求路径路径匹配给定的 cookie 路径:
- cookie-path 和 request-path 是相同的。
- cookie-path 是 request-path 的前缀,cookie-path 的最后一个字符是 %x2F ("/")。
- cookie-path 是 request-path 的前缀,不包含在 cookie-path 中的 request-path 的第一个字符是 %x2F ("/") 字符。
所以对我来说这显然是一个错误......?