gpt4 book ai didi

datetime - HttpCookie.parse 中的日期无效;应该有什么行为?

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:51 25 4
gpt4 key购买 nike

今天我将桌面上一直使用的 java 从 Oracle JDK 1.7 更改为 OpenJDK 1.7。

所以我从

java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

java version "1.7.0_65"
OpenJDK Runtime Environment (rhel-2.5.1.2.el6_5-x86_64 u65-b17)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

然后,我为我的一个项目运行了单元测试,之前运行成功的项目现在失败了。有问题的失败测试做了这样的事情:

List<HttpCookie> cookies = 
HttpCookie.parse("FOO=BAR; expires=Thu, 01-Jan-2020 00:00:10 GMT");
HttpCookie cookie = cookies.get(0);

然后使用来自的值进行断言

cookie.getMaxAge();

我发现的问题是 cookie.getMaxAge() 突然总是返回 0,而不是预期的“大”值。

事实证明,我问了一个无效问题:2020 年 1 月 1 日是星期三,而不是星期四。我在单元测试中修复了这个错误(所以现在我要求输入“Wed, 01-Jan-2020”,现在可以了)。

对我来说,问题仍然是:如果“输入不太好”,“应该”采取什么行为?

我在这里看到的两种行为都有一定的验证。

显然:

  • Oracle:可以解析日期,因此我们返回值。 “星期几”只是一个“提示”。
  • OpenJDK:该日期不能存在,因为它是指定的,因此我们返回 0

这方面有规范吗?

最佳答案

来自 Oracle javadoc我们看到该字符串必须是 set-cookie ( Netscape proposal ) 或 set-cookie2 ( RFC 2965 )。您的字符串遵循 Netscape 提案。

摘自 Netscape 提案:

The date string is formatted as:

Wdy, DD-Mon-YYYY HH:MM:SS GMT

这基于 RFC 822、RFC 850、RFC 1036 和 RFC 1123,但唯一合法的时区是 GMT,并且日期元素之间的分隔符必须是破折号。

来自RFC 822 :

5.2. SEMANTICS

If included, day-of-week must be the day implied by the date specification.

所以你的字符串不是 set-cookie 字符串。

如果出现以下情况,解析方法应抛出 IllegalArgumentException:

header string violates the cookie specification's syntax, or the cookie name contains illegal characters, or the cookie name is one of the tokens reserved for use by the cookie protocol

星期几错误是语义上对规范的违反,而不是语法上的违反,因此不必引发异常。

总之,解析方法遇到错误星期几的日期时的行为尚未定义。该规范应该要么强制引发 IllegalArgumentException,要么强制忽略该问题,因为星期几是可选的冗余信息。

关于datetime - HttpCookie.parse 中的日期无效;应该有什么行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25334997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com