【问题标题】:A cookie header was received that contained an invalid cookie.收到包含无效 cookie 的 cookie 标头。
【发布时间】:2016-08-08 11:59:00
【问题描述】:

我正在迁移我的服务器从 Tomcat-6Tomcat-9。我的网站是为 HTTP/1.1 协议设计的。 server.xml 文件包含 org.apache.coyote.http11.Http11NioProtocol 的连接器协议。服务器正常启动,不会产生任何错误。但是,当我尝试使用 localhost 访问我的网站时,出现以下错误:-

INFO [https-nio-8445-exec-3] org.apache.tomcat.util.http.parser.Cookie.logInvalidHeader 收到 cookie 标头 [ 2, 3, 4, 5 , 6, 7, 8, 9, 10, 11, 12, 21, 22, 23]; userId=53136] 包含无效的 cookie。该 cookie 将被忽略。注意:此错误的进一步发生将在 DEBUG 级别记录。

谁能告诉我这个错误的原因? 什么导致无效的cookie? 如果我使用不同的连接器可以避免这个错误吗?

【问题讨论】:

  • 你解决过这个问题吗?我遇到了同样的错误
  • 不,我还没有解决。我无法在任何地方得到答案,因此正在等待迁移。
  • 我们在 Apache Tomcat 8.5 上遇到了问题
  • 您的 cookie 被较新的 Tomcat 的 CookieProcessor 拒绝。可能的解决方案是: (1) 将您的 cookie 更改为兼容的。 (2) 配置您的 Tomcat 以使用旧的 LegacyCookieProcessor。 (3)。停止升级。 [参考文献:(a)stackoverflow.com/a/38705982/1878585。 (b)tomcat.apache.org/migration-85.html#Cookies。 (c)tomcat.apache.org/tomcat-8.5-doc/config/…]
  • 是否有办法禁用此日志记录,因为 cookie 可能包含敏感数据?

标签: java tomcat networking cookies web


【解决方案1】:

我发现部署在 tomcat 上的 API 在我发送 cURL 请求时能够抓取 cookie,尽管有 tomcat 警告。

curl -XPOST -H "Content-Type: application/json"  --cookie "userId=64ad960c-bb7e-48dd-8191-4f31539bc2c2,accessToken=64ad960c-bb7e-48dd-8191-4f31539bc2c2" -d '{"message":"play porcupine tree"}' http://localhost:9090/nlu/convo

但是要删除警告,必须在 tomcat 配置 (conf/context.xml) 中更新 cookie 处理器 (LegacyCookieProcessor)

例子,

cat /usr/local/apache-tomcat-8.5.12/conf/context.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!-- The contents of this file will be loaded for each web application -->
<Context>

    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!--
    <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor" />
    -->

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

</Context>

我认为org.apache.tomcat.util.http.Rfc6265CookieProcessor 会起作用,但没有,LegacyCookieProcessor 是必需的。

参考

https://tomcat.apache.org/tomcat-8.5-doc/config/cookie-processor.html#Legacy_Cookie_Processor_-_org.apache.tomcat.util.http.LegacyCookieProcessor

https://www.rfc-editor.org/rfc/rfc6265

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

【讨论】:

    【解决方案2】:

    我在使用 2.2.x 以上版本的 Spring Boot 时遇到了这个问题

    添加下面的bean后修复了

    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieProcessorCustomizer() {
        return tomcatServletWebServerFactory -> tomcatServletWebServerFactory.addContextCustomizers((TomcatContextCustomizer) context -> {
          context.setCookieProcessor(new LegacyCookieProcessor());
        });
      }
    

    【讨论】:

      【解决方案3】:

      Fwiw:我不知何故让我的 Chrome 浏览器进入了一个真正的 b0rken 状态,让它发送一个带有不匹配引号的格式错误的 cookie:"XSRF-TOKEN=93926112-aa12-440e-8e06-02b7fbce27d5;

      仅从开发人员工具中清除 cookie 是不够的,但 Application 选项卡侧边栏中的 Clear storage 似乎已经完成了。

      【讨论】:

        猜你喜欢
        • 2021-02-24
        • 2023-02-25
        • 2019-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 2013-05-19
        相关资源
        最近更新 更多