J'obtiens une trace sous la pile lorsque je déploie mon application dans un environnement Apache Tomcat 8 multi-serveur. Je reçois fréquemment cette erreur et il semble que cela bloque le thread 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)
Quelqu'un peut-il me dire comment résoudre un problème ou restreindre une telle exception? Je ne reçois aucune référence à aucun de mes fichiers source d'application. J'ai essayé de google autour, et dans les liens qu'il a dit, vous essayez d'accéder à http url via https, ce qui semble peu probable. Je ne reçois pas cette erreur lorsque l'application s'exécute sur une seule instance de Tomcat 8. Je ne reçois cela que dans un environnement multi-serveur.
Je partage également les balises méta que j'ai intégrées à chaque page, si cela aide à identifier la cause.
<%
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">
J'utilise également les éléments suivants dans quelques pages, qui sont fondamentalement les mêmes que ci-dessus:
<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" />
Même si quelqu'un aide à donner une direction à ma tentative de dépannage, cela me sera utile, car je ne sais pas pour l'instant où chercher.
Merci d'avance.
Cette exception peut se produire lorsque vous essayez d'exécuter une requête https depuis un client sur un noeud final sur lequel https n'est pas activé. Le client chiffrera les données de la demande lorsque le serveur attend des données brutes.
J'ai eu la même exception lorsque j'ai testé localement. Le problème était un schéma d'URL dans ma demande.
Changer https:// to http:// in your client url.
Ca aide probablement.
Vous appelez le serveur local avec http : // localhost: 8080/foo/bar. Appelez-le avec https : // localhost: 8080/foo/bar. Cela résout le problème
J'ai reçu cette exception non liée à des problèmes de SSL. Dans mon cas, la valeur de l'en-tête Content-Length ne correspond pas à la longueur du corps.
Répondre à cette ancienne question (pour les autres, cela peut aider)
Si vous configurez correctement votre httpd conf, le problème sera résolu. Installez n'importe quel serveur httpd, si vous n'en avez pas.
Liste de ma configuration ici.
[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
...
...
...
éditez le fichier comme ci-dessus, puis redémarrez httpd comme ci-dessous
[smilyface@box002 ~]$ Sudo service httpd restart
Et ensuite, demander avec avec https
fonctionnera sans exception.
Aussi, les requêtes avec http
seront transmises à https
! Pas de soucis.
Il m'est arrivé lorsqu'un même port utilisé dans SOCKS sous tunnel ssh exécutait un proxy dans un port 8080 et que mon serveur et mon proxy de navigateur firefox étaient définis sur ce port et que ce problème était résolu.
J'obtenais la même exception chaque fois qu'une page était chargée,
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)
J'ai trouvé que l'une des URL de ma page était https au lieu de http; quand j'ai changé, l'erreur était partie.
Cela se produit généralement lorsque vous utilisez un schéma URI qui n'est pas pris en charge par le serveur sur lequel l'application est déployée. Ainsi, vous pouvez soit vérifier quels schémas sont pris en charge par votre serveur et modifier votre requête URI
en conséquence, soit ajouter le support de ce schéma sur votre serveur. La portée de votre application devrait vous aider à prendre une décision.