Tomcat 7.0.43をwebsocketアプリケーションで使用しています。私のアプリはTomcat 7.0.42で正常に動作しますが、43を使用すると、websocketでサーバーにアクセスしようとすると次の出力が得られます。
Sep 16, 2013 3:08:34 AM org.Apache.coyote.http11.AbstractHttp11Processor process
INFO: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
ブラウザコンソールに次のように表示されます。
WebSocket connection to 'ws://www.testapp.com/socket/notification/848df2e62fcf93e1b3?X-Atmosphere-tracking-i…Date=0&Content-Type=application/json;%20charset=UTF-8&X-atmo-protocol=true' failed: Unrecognized frame opcode: 5
そのリクエストのアクセスログは次のとおりです。
"GET /socket/notification/848df2e62fcf93e1b3?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=2.0.2-javascript&X-Atmosphere-Transport=websocket&X-Atmosphere-TrackMessageSize=true&X-Cache-Date=0&Content-Type=application/json;%20charset=UTF-8&X-atmo-protocol=true HTTP/1.1"
Tomcat 7.0.43で何が変更されましたか?何を変更する必要がありますか?
このリスナーがある場合:
<Listener className="org.Apache.catalina.core.AprLifecycleListener" SSLEngine="on"/>
server.xmlで、削除して試してください。 APRコネクタを使用している場合、キーストアを使用できません
キャッシュされたCookieが多すぎると、サーバーが破損します(要求ヘッダーのサイズが大きすぎます!)。 Cookieをクリアすると、この問題も修正できます。
私にとって、問題は通常予想されるHTTPヘッダーよりも大きいものを渡すことでした。 server.xmlのコネクタノードでmaxHttpHeaderSize = "1048576"属性を設定することで解決しました。
同様の問題があり、リクエスト本文にデータを含むPOSTリクエストを送信し(FirefoxのRESTClientプラグインを使用)、同じメッセージを受信していました。
私の場合、これはHTTPSが設定されていないローカルTomcatインスタンスでHTTPSプロトコルを使用しようとしたために発生しました。
httpsを開こうとすると問題が発生します。 SSLは使用しません。
Tomcatです バグ 。
今日12/02/2017Debianリポジトリの最新の公式バージョンはTomcat 8.0.14
解決策は、公式サイトからダウンロードして、Tomcat 8、8.5、9の最新パッケージをインストールするか、最新バージョンにアップグレードすることです(8.5.x)jessie-backportsから
/ etc/apt/sources.listに追加
deb http://ftp.debian.org/debian jessie-backports main
次に、jessie-backportsからTomcatを更新してインストールします
Sudo apt-get update && Sudo apt-get -t jessie-backports install Tomcat8
上記のすべてを試してみましたが、うまくいきませんでした。次に、HTTP/1.1とTomcat管理ポートの両方のTomcatポート番号を変更し、解決しました。
上記の他のソリューションが人々のために働いたと思いますが、上記のいずれかが機能しない場合は、このソリューションを試す価値があります。
みんな、ありがとう!
この場合、他のURLに対してHttpServletResponse sendRedirect()
を実行するカスタムfilter
がアプリケーションにあるため、エラーが発生したことがわかりました。
何らかの理由で、リダイレクトが接続のkeep-alive
ステータスを閉じないため、タイムアウト例外が発生します。
Tomcat Docs で確認し、maxKeepAliveRequests
の値を1
に設定して無効にすると、エラーが表示されなくなりました。
今のところ、エラーの実際の解決策はありません。
Tomcatをアップグレードしたくない場合は、catalina.properties
にこの行を追加してください
Tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
それは私のために働く http://www.zhoulujun.cn/zhoulujun/html/Java/Tomcat/2018_0508_8109.html