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

 

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

缘由:

*从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.Cookieapache

复制代码
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以下tomcat

<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处理器的行为
 若是须要。
 
努力与得到每每不成正比,但不至于成反比。

https://www.cnblogs.com/passedbylove/p/7587142.htmlcookie

相关文章
相关标签/搜索