我将我的服务器从 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的原因是什么? 如果我使用不同的连接器,是否可以避免此错误?
答案 0 :(得分:2)
我发现在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配置(LegacyCookieProcessor
)中的cookie处理器(conf/context.xml
)
示例,
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://tools.ietf.org/html/rfc6265
LegacyCookieProcessor
实现了对cookie规范的严格解释。 由于浏览器的各种互操作性问题并非全部严格 默认情况下启用行为,并且可以使用其他选项 如果需要,进一步放松这个cookie处理器的行为。
答案 1 :(得分:2)
我在2.2.x以上版本的Spring Boot中遇到了这个问题
在添加以下bean之后得到修复
private Mock<ISearchResults> _mockSearchResults;
答案 2 :(得分:0)
Fwiw:我以某种方式使我的Chrome浏览器进入了崩溃状态,使其发送格式不正确的Cookie,并带有不匹配的引号:"XSRF-TOKEN=93926112-aa12-440e-8e06-02b7fbce27d5;
仅从开发人员工具中清除cookie是不够的,但是从Clear storage
标签的侧边栏中的Application
似乎已经完成了。