私はmigrating my Serverを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の原因は何ですか?別のコネクタを使用すると、このエラーを回避できますか?
Tomcat警告がありましたが、cURLリクエストを送信すると、TomcatにデプロイされたAPIがCookieを取得できることがわかりました。
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
But警告を削除するには、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://tools.ietf.org/html/rfc6265
LegacyCookieProcessor
は、Cookie仕様の厳密な解釈を実装します。ブラウザのさまざまな相互運用性の問題により、すべての厳密な動作がデフォルトで有効になるわけではなく、必要に応じて、このCookieプロセッサの動作をさらに緩和するための追加オプションを利用できます。
Fwiw:どういうわけか、私はChromeブラウザを本当にb0rken状態にして、引用符が一致しない不正な形式のCookieを送信するようにしました:"XSRF-TOKEN=93926112-aa12-440e-8e06-02b7fbce27d5;
開発者ツールからCookieをクリアするだけでは不十分でしたが、Clear storage
Application
タブのサイドバーから実行したようです。