2016-06-15 92 views
16

Tomcat8で実行されているSpring MVCアプリケーションがあります。一回一日か二日で、私は私のログファイルに例外を取得java.lang.IllegalArgumentException:メソッド名に無効な文字(CRまたはLF)が見つかりました

15-Jun-2016 10:43:39.832 INFO [http-nio-8080-exec-50] 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 (CR or LF) found in method name 
    at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:228) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

誰もがこれが何であるかのアイデアがありますか?

+1

着信HTTPリクエストのヘッダーが不正な形式です。エラーメッセージが示すように、リクエストヘッダーには、HTTPメソッド名(行末)に禁止文字が含まれているため、リクエストパーサーは例外で失敗します。だからあなたのコードでは問題ではありません。それを無視するか、送信者に要求の有効性を確認するよう依頼することができます。 –

+0

@Vladimir Vagaytsev - Webからのリクエストです.Lginはnginxで設定しています。サーバー上で、上記のエラーがスローされ、不正なゲートウェイがスローされます。 scalescale.com/tips/nginx/502-bad-gateway-error-using-nginx助けてくれなかった:( –

+0

私は、この例外は同じ(よく似たような)戦争として、SSLセットアップの詳細を行う必要があると信じています私たちがhttpでアクセスするステージマシンで動作します - テストプロダクションセットアップ(httpsを使用)がこの問題に直面しているところですが、nginxの設定を確認してください。あなたが修正を見つけた場合、私に教えてください:) –

答えて

27

このエラーは、不正な形式のHTTP要求が原因です。 通常、このエラーは、httpsからセキュリティで保護されていないページにアクセスしようとしているときに発生するため、誤解を招くことがあります。 Tomcatは着信要求が暗号化されていることを知らず、この要求を安全で安全でないHTTP要求として解釈しようとしています。

これは、それがログで見ることができる方法です:

標準、HTTPSリクエスト(https://localhost:8080

Received [¹µHÄ;ß[email protected]<¿ 
                                   #|vFBb-Ëiø/5 
jÿ 

        hhttp/1.1uP 
           
] 

適切なHTTPリクエスト(http://localhost:8080

Received [GET /index.html HTTP/1.1 
Host: localhost:8080 
Connection: keep-alive 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: pl,en-US;q=0.8,en;q=0.6 
Cookie: Idea-xxxxx; JSESSIONID=3dxxxxx 

] 

あなたが見ることができるように2番目のリクエストでは、適切なHTTPメソッド名ではなく、未知の文字があります(例: GET)

だからあなたのサーバーにはSSLの設定を持っていないと、エラーは、おそらく誰かがhttpsを通して、あなたのウェブサイト(ボットのおそらくいくつかの種類)

結局誰かに到達しようとしている、「一日一回または2に」発生した場合(自身のアプリケーション(ボットまたは他のカスタムクライアントを介して))HTTPリクエストを送信しようとしています。

+1

このエラーは、Tomcatが動作しなくなる原因になりますか?この例外が何度も発生していて、Tomcatが定期的に停止しています... – KJEjava48

+0

いいえ、これはTomcatの動作を停止させません。 – ldevp

+0

それはgoogle botかもしれませんか? – shareef

2

springbootでこの問題も追加してください。 私はHTTPS URLを使用していましたが、私のローカルサーバーはSSLを使用していなかったので、私はそのURLをHTTPに切り替えました。

0

このエラーは、ポート不良のために発生する可能性があります。実際

、あなたがスローHTTPSを受け入れたい場合は、デフォルトのTomcatポートは8443であることに注意してください: https://localhost:8443

+0

これは良い事実の情報ですが、手元の質問に答える形で書かれていませんでした。この回答を削除し、最も適切な回答にコメントとして追加してください。 –

+0

私は同意しません。私は悪いポートのためにまったく同じエラーがあったのでこのコメントを投稿しました – hadf

+0

それは問題ありませんが、質問を何らかの形で含めるように回答を書き換えてください。あなたの応答には、「HTTPを受け入れるようにするには、デフォルトのTomcatポートは8080です。」と同じ情報が含まれていることに注意してください。その情報を彼の問題に関係づけないのは、私がそれが質問に答えないと言う理由です。事実は正しいですが、FTPのデフォルトポートが21であるということもあります。事実と問題がどのように関連しているかを示すまで、あなたはその質問に答えるつもりはありません。 –

0

再確認送られたリクエスト。 エンドポイントがhttpsを有効にしていない場合は、httpで要求を渡します。

0

私もHTTP POST Requestで同じ問題に直面しました。問題は「JSONデータが正しくありませんでした」でした。私はオブジェクトに間違った(スペルミス)を渡していたクラスでenum属性を持っていました。そして、私はこの例外を受け取りました。

関連する問題