收到的Cookie标头包含无效的Cookie.

Dhu*_*wal 15 java cookies networking tomcat web

我正在将我的服务器从Tomcat-6 迁移Tomcat-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的原因是什么?如果我使用不同的连接器,是否可以避免此错误?

小智 7

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

添加下面的 bean 后它得到修复

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


pra*_*upd 5

我发现部署在 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
Run Code Online (Sandbox Code Playgroud)

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

例子,

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>
Run Code Online (Sandbox Code Playgroud)

我认为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://tools.ietf.org/html/rfc6265

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