2017-02-14 12 views
27

Dostaję poniżej śledzenia stosu podczas wdrażania mojej aplikacji w środowisku serwera Apache Tomcat 8 z wieloma serwerami. Ja dostaję ten błąd często i wydaje się, że nie blokuje wątek tomcat:java.lang.IllegalArgumentException: Znaleziono niepoprawną nazwę w nazwie metody. Nazwy metod HTTP muszą być tokenami

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) 

Może ktoś kierować mi jak rozwiązać lub zawężenia takiego exeption? Nie otrzymuję żadnego odniesienia do żadnego z moich plików źródłowych aplikacji. Próbowałem google dookoła, a we wskazanych linkach próbujesz uzyskać dostęp do adresu URL http przez https, co wydaje się mało prawdopodobne. Nie otrzymuję tego błędu, gdy aplikacja działa na jednej instancji Tomcat 8. Rozumiem to tylko w środowisku z wieloma serwerami.

Udostępniam także metatagi, które umieściłem na każdej stronie, jeśli pomaga to zidentyfikować przyczynę.

<% 
    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"> 

Jestem również za pomocą następujących czynności na kilku stronach, które w zasadzie są takie same jak powyżej:

<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" /> 

Nawet jeśli ktoś pomaga w dawaniu kierunek do mojego rozwiązywania problemów próby, które będą użyteczne, jak obecnie nie mam pojęcia, gdzie się zaglądać.

Z góry dziękuję.

Odpowiedz

53

Ten wyjątek może wystąpić podczas próby wykonania żądania HTTPS od klienta w punkcie końcowym, który nie obsługuje protokołu HTTPS. Klient zaszyfruje dane żądania, gdy serwer oczekuje nieprzetworzonych danych.

+1

Nie jestem pewien, czy rozumiem tę odpowiedź. Mam aplikację Spring Boot 1.5.1 i widziałem ten wyjątek w moim dzienniku. Moja aplikacja odpowiada tylko na protokół SSL na porcie 8443 (przekierowany z portu 443) i ma tylko jedno złącze dla protokołu SSL. Czy mówisz, że ktoś mógłby wypróbować http: zamiast https: na porcie 443? –

+2

Takie wyjątki zdarzają się, gdy występuje niezgodność między oczekiwaniami i oczekiwaniami serwera. To, co powiedziałeś, jest jednym z możliwych scenariuszy. Może na twoim serwerze istnieje punkt końcowy, który nie działa na https, ale ktoś próbuje uzyskać do niego dostęp w ten sposób? –

+1

Witaj, Piotrze ... Problem polegał na tym, że ktoś stworzył regułę Tablice IP, aby przesłać port 80 do portu 8443, więc każdy, kto trafił na stronę używając http na porcie 80, spowodował ten błąd. Dodaliśmy złącze Tomcat, aby przekierować port 8080 na 8443 i skonfigurować regułę Tablice IP, aby przekazywać port 80 do portu 8080, a problem już minął. Dziękuję za odpowiedź! –

Powiązane problemy