2016-06-15 17 views
16

yöntem adında geçersiz karakter (CR veya LF) bulundu Tomcat8 üzerinde çalışan bir Spring MVC uygulamasına sahibim. Bir kez bir veya iki gün içinde benim günlük dosyasında bir istisna olsunjava.lang.IllegalArgumentException:

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) 

herkes bu olabilir bir fikrin var mı?

+1

Gelen HTTP isteği başlığı hatalı görünüyor. Hata mesajı size söyleyeceğinden, istek başlığı HTTP yöntem adında (satırın sonu) yasaklanmış karakter içerdiğinden, ayrıştırıcı ile istisna başarısız olur. Yani kodunuzda bir sorun değil. Ya görmezden gelebilir veya gönderenin istek geçerliliğini kontrol etmesini isteyebilirsiniz. –

+0

@Vladimir Vagaytsev - istek Web'den olduğunu ve biz nginx ile LB kurulum var. Sunucuda yukarıdaki hatayı atar ve Bad Gateway'i atar. scalescale.com/tips/nginx/502-bad-gateway-error-using-nginx yardım etmedi :( –

+0

Bu istisnanın, aynı (iyi, neredeyse benzer) savaş gibi SSL Kurulumu ile daha fazlasını yapması gerektiğine inanıyorum biz http ile erişmek - - sahne makinelerde çalışır biz bu durumla karşı karşıyadır nerede Test Üretim kurulumu Oysa edilir (https kullanarak) mı bizim nginx yapılandırmasını kontrol etmek..Durumda, düzeltmeyi buldunuz, bana haber verin :) –

cevap

27

Bu hata, yanlış biçimlendirilmiş HTTP isteği nedeniyle oluşur. Çoğu durumda bu ileti yanıltıcıdır çünkü bu hata genellikle güvenli olmayan sayfaya https üzerinden erişmeye çalıştığınızda gerçekleşir. Tomcat gelen istek şifrelendiğini bilmez ve düz, güvenli olmayan http isteği olarak bu isteği yorumlamak çalışıyor.

Bu

o günlüklerine nasıl geçerli:

Standardı, uygun HTTP isteği (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 

] 

HTTPS isteği (https://localhost:8080)

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

        hhttp/1.1uP 
           
] 

Sen sevebilirsin e ikinci isteme göre, uygun HTTP yöntem ismi yerine bilinmeyen karakterlerdir (ör. GET)

Yani Sunucu hiçbir SSL yapılandırması vardır ve hata sonra muhtemelen birileri https üzerinden web sitenize (bot muhtemelen bir çeşit)

Sonunda birisi ulaşmaya çalışıyor, "günde bir ya da iki" ortaya çıkarsa güvenli olmayan ama yanlış biçimlendirilmiş düz HTTP isteği göndermeye çalışıyor (kendi uygulamasıyla - bot veya diğer özel istemci).

+1

Bu hata, tomcat'in çalışmayı durdurmasına neden oluyor mu? Bu istisnai defalarca alıyorum ve tomcat'ım düzenli aralıklarla duruluyor ... – KJEjava48

+0

Hayır, bu, tomcat'in çalışmayı bırakmasına izin vermiyor. – ldevp

+0

google bot olabilir mi? – shareef

2

Sadece bu sorunu springboot ile ekleyin. Bir HTTPS url kullanıyordum ancak yerel sunucum SSL kullanmıyordu, bu yüzden url'yi HTTP'ye geçirdim ve çalıştı.

0

Bu hata, hatalı bağlantı noktasından dolayı oluşabilir.

Aslında fark olduğunu sen atmak HTTPS varsayılan Tomcat bağlantı noktası 8443 olduğunu kabul istiyorsanız: https://localhost:8443

+0

Bu iyi bir olgusal bilgidir, ancak soruyu cevaplayan bir şekilde yazılmamıştır. Lütfen bu cevabı silin ve en uygun cevaba yorum olarak ekleyin. –

+0

Katılıyorum. Bu bağlantıyı yayınladım çünkü hatalı bağlantı noktası – hadf

+0

nedeniyle tam olarak aynı hatayı aldım, ama bu soruya bir şekilde yanıt vermek için lütfen cevabınızı yeniden yazınız. Yanıtınız, "HTTP'yi kabul et seçeneğini kabul ederseniz, varsayılan Tomcat bağlantı noktasının 8080 olduğunu" ve aynı bilgileri içereceğini unutmayın: Varsayılan bağlantı noktaları hakkında bilgi. Bu bilgiyi onun problemine bağlamamak, neden soruyu cevaplamadığını söylüyorum. Gerçek şu ki, FTP'nin varsayılan portunun 21 olduğunu söylemek de aslında. Gerçeğin ve sorunun nasıl ilişkili olduğunu gösterene kadar, soruyu cevaplamıyorsunuz, sadece gerçekleri söylüyorsunuz. –

0

tekrar kontrol et talebi. https http isteği geçmek etkin değil son nokta ise.

0

Ayrıca HTTP POST İsteği ile aynı sorunla karşı karşıya kaldım - Sorun "JSON verileri doğru değildi". Nesnede yanlış (yazım hatası) geçirdiğim sınıfta bir enum özniteliğim vardı. Ve bu istisnaı alıyordum.

İlgili konular