文章目录

`Springboot` 访问接口的`A cookie header was received`警告问题1 警告信息2 原因3 解决方案

Springboot 访问接口的A cookie header was received警告问题

1 警告信息

A cookie header was received [1686195932,1687937497; Hm_lpvt_fadc1bd5db1a1d6f581df60a1807f8ab=1687942021] that contained an invalid cookie. That cookie will be ignored.

Note: further occurrences of this error will be logged at DEBUG level.

翻译

收到一个cookie头[1686195932,1687937497;Hm_lpvt_fadc1bd5db1a1d6f581df60a1807f8ab=1687942021]包含无效cookie。该cookie将被忽略。

注意:此错误的进一步发生将在DEBUG级别记录。

2 原因

问题就是从Tomcat 8,Cookie的解析已经符合RFC 6265。由于RFC 6265不再接受以前允许的逗号分隔符(例如RFC 2109)。所以会将 "Cookie:KEY 1 = VAL 1,KEY 2 = VAL 2"的格式所以被视为非法。

RFC 2109

Cookie标头中的分隔符在任何地方都是分号(;)。服务器还应该接受逗号(,)作为cookie值之间的分隔符,以便将来兼容。

Cookie标头中的分隔符是分号(;)无处不在 服务器应该接受逗号和分隔符以向后兼容cookie值。

换句话说,RFC 2109中的"Cookie:KEY 1 = VAL 1,KEY 2 = VAL 2"正常。

RFC 6265

cookie-header ="Cookie:"OWS cookie-string OWS

cookie-string = cookie-pair *(";"SP cookie对)

没有具体使用逗号作为分隔符的描述

Tomcat源码

org.apache.tomcat.util.http.parser.Cookie

public static void parseCookie(byte[] bytes, int offset, int len,

ServerCookies serverCookies) {

// ・・・略・・・

// 使用RFC6265解析规则,检查报头是否以版本标记开始。

// RFC2109版本标记可以使用RFC6265解析规则读取。

// 如果是版本1,则使用RFC2109。否则使用RFC6265。

skipLWS(bb);

// ・・・略・・・

if (skipResult != SkipResult.FOUND) {

// No need to reset position since skipConstant() will have done it

parseCookieRfc6265(bb, serverCookies);

return;

}

3 解决方案

(1) 将您的 cookie 更改为兼容的。 (2) 配置您的 Tomcat 以使用旧的 LegacyCookieProcessor。 (3) 停止升级。

参考文献

stackoverflowtomcattomcat

解决

使用传统Cookie处理器org.apache.tomcat.util.http.LegacyCookieProcessor。这是基于RFC 6265,RFC 2109和RFC 2616的遗留cookie解析器。

LegacyCookieProcessor 实现了对cookie规范的严格解释。 由于与浏览器的各种互操作性问题并非都是严格的 默认情况下启用行为,并且可以使用其他选项 如果需要,进一步放宽此cookie处理器的行为。

@Bean

public WebServerFactoryCustomizer cookieProcessorCustomizer() {

return tomcatServletWebServerFactory -> tomcatServletWebServerFactory.addContextCustomizers(

(TomcatContextCustomizer) context -> { context.setCookieProcessor(new LegacyCookieProcessor());});

}

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: