收到包含无效 cookie 的 cookie 标头。

Posted

技术标签:

【中文标题】收到包含无效 cookie 的 cookie 标头。【英文标题】:A cookie header was received that contained an invalid 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)***.com/a/38705982/1878585。 (b)tomcat.apache.org/migration-85.html#Cookies。 (c)tomcat.apache.org/tomcat-8.5-doc/config/…] 是否有办法禁用此日志记录,因为 cookie 可能包含敏感数据? 【参考方案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 似乎已经完成了。

【讨论】:

以上是关于收到包含无效 cookie 的 cookie 标头。的主要内容,如果未能解决你的问题,请参考以下文章

org.apache.tomcat.util.http.parser.Cookie.logInvalidHeader 收到包含无效cookie的cookie头(含图文)

org.apache.tomcat.util.http.parser.Cookie.logInvalidHeader 收到包含无效cookie的cookie头(含图文)

org.apache.tomcat.util.http.parser.Cookie.logInvalidHeader 收到包含无效cookie的cookie头(含图文)

尝试从 gitlab 检索配置信息时获取“无效的 cookie 标头:“Set-Cookie:experimentation_subject_id ...”

使用fetchAPI和Drupal作为解耦后端的无效X-CSRF-Token请求标头

无法添加Cookie,已发送标头。 cron作业出错,但在浏览器中加载时无效