java - 有效 Cookie 值的明确指南

标签 java http

我知道还有其他问题,但他们的答案似乎是假设而非确定的。

我有限的理解是 cookie 值是:

  • 已经使用分号分隔单个 cookie 中的 cookie 属性。
  • 等号用于分隔 cookie 名称和值
  • 冒号用于分隔 header 中的多个 cookie。

还有其他“特殊”字符吗?

其他一些 q/a 建议一个 base64 对值进行编码,但这当然可能包含等号,这当然是无效的。

我也看到一些建议,可能会引用值,但会导致其他问题。

  • 特殊字符需要加引号吗?
  • 引用的值是否支持通常的反斜杠转义机制。

征求意见稿 我阅读了一些 RFC,包括许多 cookie RFCS 中的一些,但我仍然不确定,因为存在对另一个 RFC 等的交叉引用,没有明确的简单解释或“回答”我的查询的示例。

希望没有人会说阅读 RFC,因为问题变成了哪个 RFC...?

我想我也读过不同的浏览器有稍微不同的规则,所以希望如果这很重要,请在您的回答中注明。

最佳答案

最新的 RFC 是 6265 ,并且它声明以前的 Cookie RFC 已过时。

这是 RFC 中的语法规则:

 cookie-pair       = cookie-name "=" cookie-value
 cookie-name       = token
 cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
 cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
                       ; US-ASCII characters excluding CTLs,
                       ; whitespace DQUOTE, comma, semicolon,
                       ; and backslash

因此:

  • 特殊字符是空白字符、双引号、逗号、分号和反斜杠。等于不是特殊字符。

  • 除了可以用双引号括住值外,根本不能使用特殊字符。

  • 不能引用特殊字符。

  • 反斜杠不作为转义符。

由此可见可以使用base-64编码,因为equals并不特殊。

最后,据我所知,RFC 6265 cookie 值的定义使得它们可以与实现任何 Cookie RFC 的任何浏览器一起使用。但是,如果您尝试使用不符合 RFC 6265 的 cookie 值(但可以说确实符合早期的 RFC),您可能会发现 cookie 行为因浏览器而异。

简而言之,符合 RFC 6265 的规定,你应该没问题。

如果您需要传递包含任何禁止字符的 cookie 值,您的应用程序需要对这些值进行自己的编码和解码;例如使用 base64。

关于java - 有效 Cookie 值的明确指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6108207/

相关文章:

laravel - 如何修复 Laravel request/routes/urls - 它认为 url 是 http,而实际上是 https

java - 使用 Maven 修改存档

java - 反序列化通用类 Jackson 或 Gson

validation - 返回 HTTP 409 是否适合验证检查?

Angular 4 : Convert Response from API to PDF

java - android中使用json进行http连接时出错

c# - 如何模拟一次请求时的主机文件

Java - 获取两个日期之间的日期,给出意想不到的结果

java - 制作一个 JFrame 按钮创建一个警告对话框。 Java-Netbeans

java - 禁用单选按钮组