私のアプリケーションをマルチサーバーのApache Tomcat 8環境にデプロイすると、スタックトレースを下回ります。私は頻繁にこのエラーを受けています、そしてそれはそれがTomcatスレッドをブロックしているようです:
INFO [http-nio-80-exec-4461] org.Apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
Java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
at org.Apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.Java:233)
at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1017)
at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:684)
at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1524)
at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1480)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
at Java.lang.Thread.run(Unknown Source)
誰かがどのようにトラブルシューティングやそのような例外を絞り込むかを私に指示することができますか?私は自分のアプリケーションのソースファイルのどれも参照していません。私はGoogleを試してみました、そしてそれが言ったリンクの中で、あなたはhttpsを通してhttp urlにアクセスしようとしています、それはありそうもないようです。アプリケーションが単一のTomcat 8インスタンスで実行されている場合、このエラーは発生しません。これはマルチサーバー環境でしか得られません。
原因の特定に役立つ場合は、各ページに埋め込んだメタタグも共有しています。
<%
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "no-cache");
%>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
<meta name="viewport" content="width=device-width, initial-scale=1">
私はまた、数ページで次のものを使用していますが、これは基本的に上記と同じです。
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="private" />
<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="Pragma" content="no-cache" />
誰かが私のトラブルシューティングの試みを指示するのを手伝ってくれたとしても、現在私はどこを調べるべきかわからないので、それは役に立つでしょう。
前もって感謝します。
Httpsが有効になっていないエンドポイントでクライアントからhttps要求を実行しようとしたときに、この例外が発生する可能性があります。サーバーが生データを期待している場合、クライアントは要求データを暗号化します。
ローカルでテストしたときにも同じ例外が発生しました。問題は私のリクエストのURLスキーマでした。
https:// to http:// in your client url.
を変更
おそらくそれは役立ちます。
ローカルサーバーを http :// localhost:8080/foo/barで呼び出しています。 https :// localhost:8080/foo/barで呼び出します。これは問題を解決します
SSLの問題とは無関係にこの例外を受け取りました。私の場合、Content-Lengthヘッダー値は本文の長さと一致しませんでした。
この古い質問に答える(助けになるかもしれない他の人のために)
httpd confを正しく設定すれば問題は解決します。 httpdサーバーがない場合は、インストールします。
ここに私の設定をリストします。
[smilyface@box002 ~]$ cat /etc/httpd/conf/httpd.conf | grep shirts | grep -v "#"
ProxyPass /shirts-service http://local.box002.com:16743/shirts-service
ProxyPassReverse /shirts-service http://local.box002.com:16743/shirts-service
ProxyPass /shirts http://local.box002.com:16443/shirts
ProxyPassReverse /shirts http://local.box002.com:16443/shirts
...
...
...
上記のようにファイルを編集してから、以下のようにhttpdを再起動します。
[smilyface@box002 ~]$ Sudo service httpd restart
そして、https
を指定したrequestは例外なく動作します。
またhttp
でリクエストするとhttps
に転送されます心配ない。
私は8080ポートでプロキシを実行するためにsshトンネルSOCKSで使われているのと同じポートを持っていて、私のサーバーと私のFirefoxブラウザプロキシがそのポートに設定されていてこの問題を起こしました。
ページが読み込まれるたびに、私は同じ例外を受けていました、
NFO: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
Java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
at org.Apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.Java:139)
at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1028)
at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:637)
at org.Apache.Tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.Java:316)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1149)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:624)
at org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
at Java.lang.Thread.run(Thread.Java:748)
私は自分のページのURLの1つがhttpではなくhttpsであることを発見しました、私が同じ変更をしたとき、エラーは消えました。
これは通常、 URIスキームを使用している場合に発生します アプリケーションがデプロイされているサーバーではサポートされていません。そのため、サーバーがサポートしているすべてのスキームを確認し、それに応じて要求URI
を変更するか、サーバーにそのスキームのサポートを追加することをお勧めします。あなたのアプリケーションの範囲はあなたがこれを決めるのを助けるべきです。