为什么Cookie通过CookieHandler传入CookieManager后格式发生改变?
问题原因
该格式变化是JDK内置CookieManager的默认实现逻辑导致的,核心触发点有两个:
- Cookie版本自动转换:你传入的Set-Cookie头中标记了
Version=0,对应最早期的Netscape Cookie规范,而CookieManager默认输出采用RFC 2965规范(对应Version=1),该规范要求Cookie属性前添加$前缀,因此输出结果中自动增加了$Version、$Path、$Domain这类字段。 - 存储与输出逻辑分离:
CookieManager调用put方法时,会将传入的Set-Cookie头完全拆解,把Cookie名、值、路径、域、过期时间等属性单独存入内部的CookieStore,不会保留原始字符串格式;调用get方法获取Cookie时,会根据当前配置的Cookie策略重新序列化生成请求用的Cookie头,因此和原始输入的Set-Cookie格式必然存在差异。
可选修复方案
如果需要输出Version=0的旧格式Cookie,初始化CookieManager时指定使用Netscape Cookie策略即可:
CookieManager cookieHandler = new CookieManager(); cookieHandler.setCookiePolicy(CookiePolicy.NETSCAPE);
修改后返回的Cookie头不会携带$前缀的属性标记,和你预期的格式保持一致。
内容的提问来源于stack exchange,提问作者user9517536248
相关产品推荐
相关产品推荐

