zoukankan      html  css  js  c++  java
  • 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处理器的行为
     如果需要。
     
  • 相关阅读:
    在windows下拆卸Linux就是这么俭朴
    打点Linux下永中Office和桌面殊效的冲突
    Banshee 0.11.4
    ubuntu8.0中文输入法
    RedFlag 6.0 硬盘安置我解
    阅读器和把持体系和用户的IQ
    初试Fedora,最后还是Xubuntu
    VMware中放置Ubuntu后鼠标滚轮标题问题办理
    GNOME 的文件经管器将片面支撑标签式阅读
    ATI显卡开启fedora9的3d后果的一些条记
  • 原文地址:https://www.cnblogs.com/passedbylove/p/7587142.html
Copyright © 2011-2022 走看看