Tomcat:A cookie header was received[xxxxxx] that contained an invalid cookie. That cookie will be ig

别等时光非礼了梦想. 提交于 2020-01-21 09:44:06

Tomcat:A cookie header was received[xxxxxx] that contained an invalid cookie. That cookie will be ignored.


搬运来源:https://blogs.yahoo.co.jp/dk521123/36721868.html

原因:
*从Tomcat 8,Cookie的解析已经符合RFC 6265。
*由于RFC 6265不再接受以前允许的逗号分隔符(例如RFC 2109)
"Cookie:KEY 1 = VAL 1,KEY 2 = VAL 2"的格式被视为非法
发生过程:
*客户端(Java)
|
HTTPS

负载均衡器/粘性会话
|
HTTP

  • Apache(v 2.4.6)*也发生在2.2.31版本中
    |
    AJP 1.3
  • Tomcat(v8.5.11)
  • Web服务(Java)

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) {

// ・・・略・・・

// Using RFC6265 parsing rules, check to see if the header starts with a
// version marker. An RFC2109 version marker may be read using RFC6265
// parsing rules. If version 1, use RFC2109. Else use RFC6265.

skipLWS(bb);

// ・・・略・・・
if (skipResult != SkipResult.FOUND) {
    // No need to reset position since skipConstant() will have done it
    parseCookieRfc6265(bb, serverCookies);
    return;
}

解决方法:
旧版中,修改${catalina.home}/conf/server.xml如下

   <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor"/>
</Context>

Tomcat8/9修改context.xml如下

   <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor"/>
</Context>

参考资料:
https://tomcat.apache.org/tomcat-8.5-doc/config/cookie-processor.html

更多摘录

传统Cookie处理器 - org.apache.tomcat.util.http.LegacyCookieProcessor

这是基于RFC 6265,RFC 2109和RFC 2616的遗留cookie解析器。
它实现了对cookie规范的严格解释。
由于浏览器的各种互操作性问题,并不是所有严格的行为都被启用
默认情况下,还有其他选项可用于进一步放松此cookie处理器的行为
如果需要。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!