根据 RFC, ,“Cookie”HTTP 标头中的各个 cookie 可以用逗号和分号分隔。但是,ASP.NET 无法正确解析逗号大小写 - 它不会将逗号视为分隔符,而是将其视为值的一部分。

例如如果客户端发送标头 Cookie: a=b, c=d, ,那么 ASP.NET 应用程序将只看到一个名为“a”且值为“b, c=d”的 cookie。

作为一种特殊情况,当客户端发送多个 Cookie 标头(每个 cookie 一个)而不是将所有 cookie 组合在一个标头中时,也会发生同样的情况。从 HTTP 的角度来看,这是完全有效的,在这种情况下,标头的有效值应该是用逗号分隔的所有实例的值的串联。

有人知道这个问题的解决方法(或者可能是修复程序吗?)?我绝对需要让它发挥作用,因为我无法控制客户。

附:讽刺的是,根据 这个线程, ,.NET 内置 HTTP 客户端(又名 HttpWebRequest)的行为恰恰相反,也会导致问题。:-)

有帮助吗?

解决方案

我相信获得所需行为(无论标准正确性如何)的最简单解决方案是创建一个 HttpModule,它将正确解析来自 HttpContext.Request.Headers 的信息并将更正后的信息放入 HttpContext.Request.Cookies 中。

其他提示

众所周知,RFC 2109 和 RFC 2965 都没有描述现实。

你应该看看 草案 ietf-httpstate-cookie 这是新的 IETF httpstate 工作组的工作产品。

您链接到的版本已过时。这 HTTP状态管理机制 文档是最新且最大的,并且指定了分号。它确实说应该接受逗号以实现未来的兼容性,但这不是必需的:

笔记:为了向后兼容,cookie标头中的分离器到处都是半柱(;)。服务器还应接受逗号(,)作为cookie-values之间的分离器,以实现将来的兼容性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top