webentwicklung-frage-antwort-db.com.de

java.lang.IllegalArgumentException: In Methodenname wurde ein ungültiges Zeichen gefunden. HTTP-Methodennamen müssen Token sein

Wenn ich meine Anwendung in einer Apache Tomcat 8-Umgebung mit mehreren Servern implementiere, ist die Stack-Trace-Einstellung geringer. Ich erhalte diesen Fehler häufig und es scheint, dass er den Tomcat-Thread blockiert:

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)

Kann mir jemand sagen, wie ich eine solche Ausnahme behandeln oder eingrenzen kann? Ich bekomme keinen Verweis auf meine Anwendungsquelldateien. Ich habe versucht, zu googeln, und in den Links, die dort angegeben sind, versuchen Sie über https auf http-URL zuzugreifen, was unwahrscheinlich erscheint. Diese Fehlermeldung wird nicht angezeigt, wenn die Anwendung auf einer einzelnen Tomcat 8-Instanz ausgeführt wird. Ich bekomme dies nur in einer Multi-Server-Umgebung.

Ich teile auch die Metatags, die ich auf jeder Seite eingebettet habe, wenn dies die Ursache identifiziert.

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

Ich verwende auch auf einigen Seiten Folgendes, was im Grunde dasselbe ist wie oben:

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

Selbst wenn jemand hilft, meinem Fehlerbehebungsversuch eine Richtung zu geben, wird dies nützlich sein, da ich momentan keine Ahnung habe, wo ich nachschauen muss.

Danke im Voraus.

64
user2016012

Diese Ausnahme kann auftreten, wenn Sie versuchen, eine https-Anforderung von einem Client auf einem Endpunkt auszuführen, der nicht für https aktiviert ist. Der Client verschlüsselt die Anfragedaten, wenn der Server Rohdaten erwartet.

121
Petar Tonev

Ich habe die gleiche Ausnahme, als ich vor Ort getestet habe. Das Problem war ein URL-Schema in meiner Anfrage.

https:// to http:// in your client url. ändern

Wahrscheinlich hilft es.

24
Dev4World

Sie rufen den lokalen Server mit http : // localhost: 8080/foo/bar auf. Rufen Sie es mit https : // localhost: 8080/foo/bar auf. Das löst das Problem

12
Shivan Sawant

Ich habe diese Ausnahme unabhängig von SSL-Problemen erhalten. In meinem Fall stimmte der Content-Length-Header-Wert nicht mit der Body-Länge überein.

2
mibollma

Beantwortung dieser alten Frage (für andere, die helfen können)

Durch die korrekte Konfiguration Ihres httpd conf wird das Problem behoben. Installieren Sie einen httpd-Server, falls Sie noch keinen haben.

Meine Konfig hier aufführen.

[[email protected] ~]$ 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
        ...
        ...
        ...

bearbeiten Sie die Datei wie oben und starten Sie httpd anschließend erneut

[[email protected] ~]$ Sudo service httpd restart


Und dann funktioniert die Anfrage mit https ausnahmslos.
Auch eine Anfrage mit http wird an https weitergeleitet! Keine Bange.

1
smilyface

Es passierte mir, als ich in Ssh-Tunnel-SOCKS denselben Port zum Ausführen von Proxy im 8080-Port hatte und mein Server und mein Firefox-Browserproxy auf diesen Port eingestellt waren und dieses Problem bekamen. 

0
privatejava

Ich bekam dieselbe Ausnahme, wenn eine Seite geladen wurde. 

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)

Ich habe festgestellt, dass eine meiner Seiten-URLs https statt http war. Als ich dasselbe geändert habe, war der Fehler weg.

0

Dies geschieht normalerweise, wenn Sie ein URI-Schema verwenden, das nicht von dem Server unterstützt wird, auf dem die App bereitgestellt wird. Daher möchten Sie entweder prüfen, welche von Ihrem Server unterstützten Schemata verwendet werden, und Ihre Anforderung URI entsprechend ändern, oder Sie möchten möglicherweise die Unterstützung für dieses Schema in Ihrem Server hinzufügen. Der Umfang Ihrer Bewerbung sollte Ihnen bei der Entscheidung helfen.

0
noob