web-dev-qa-db-fra.com

Avertissement Jetty-9: badMessage: 400 Caractère illégal

J'utilise jetty-9.2.2 avec CometD-3.0.1. Je vois ci-dessous un avertissement dans ma configuration. Il arrive ~ 4,5 fois par jour .:

2014-08-28 08:50:53.712:WARN:oejh.HttpParser:qtp607635164-15194: badMessage: 
    400 Illegal character for HttpChannelOverHttp@5946f125{r=1,a=IDLE,uri=-}  

Aucun détail ne peut être débogué à partir du message d'avertissement. J'ai déjà enregistré une demande https://bugs.Eclipse.org/bugs/show_bug.cgi?id=443049 pour fournir un avertissement détaillé.

En attendant, je veux savoir ce qui cause cet avertissement? Puis-je ignorer cela ou certains messages sont perdus à cause de cela?

25
Anuj Khandelwal

J'ai eu la même erreur, puis j'ai découvert qu'elle était causée par l'utilisation de https dans l'url au lieu de http. (Mon application ne prend en charge que http à ce moment-là.) Après avoir changé https en http, il a été résolu.

47
S. Du

Mise à jour de mai 2017

Pour les utilisateurs de Jetty 9.3+, vous pouvez voir un message de journal qui rend ce code de réponse plus clair.

Voir Erreur d'analyse d'en-tête après la mise à niveau vers Jetty 9. pour plus de détails.

Réponse originale

Le Bad Message: 400 Illegal Character peut se produire lors de l'analyse d'une mauvaise requête HTTP.

C'est la réponse d'erreur HTTP que le client voit.

Certaines (pas toutes) situations dans lesquelles cela peut se produire.

  • L'EOL n'est pas "\ r\n" (CR + LF) (exigence de spécification HTTP)
  • Le jeton de la méthode HTTP n'est pas reconnu ou contient des espaces non valides après
  • La version HTTP n'est pas reconnue ou contient des caractères non valides
  • Le nom de l'en-tête HTTP ne suit pas la spécification
  • La valeur d'en-tête HTTP ne suit pas la spécification

Ce message est commun sur les serveurs publics (face à Internet).

Vous avez de mauvaises requêtes HTTP qui arrivent. Pourquoi?

  • Un client HTTP légitime a un bogue
  • Un client HTTP légitime ne suit pas la spécification HTTP
  • Un client non HTTP a tenté de se connecter à votre serveur (comme essayer d'utiliser HTTP non chiffré sur un port SSL/TLS/HTTPS, ou même quelque chose d'aussi étrange qu'un client de messagerie SMTP/IMAP essayant de parler à votre port HTTP)
  • Un client malveillant tente de détecter des faiblesses dans votre système
10
Joakim Erdfelt

Cette erreur peut être causée, comme pour moi, par une petite erreur idiote.

Lors des tests sur mon instance de la jetée de l'hôte local, j'ai reçu un message très similaire de 400 caractères illégaux. J'ai alors compris pourquoi. J'avais simplement supposé que l'adresse d'application sur ma jetée locale était:

https://localhost:8080

alors que l'adresse correcte n'était pas sécurisée:

http://localhost:8080

Aucun problème après ça.

8
Ben Weaver

Jetty se méfie des messages d'erreur détaillés qui incluent les données envoyées par l'utilisateur, car elles peuvent faire partie d'une attaque - même si elles ne sont transmises qu'à un terminal.

Cependant, nous pouvons faire mieux et enregistrer certaines données aseptisées. Agir sur le bugzilla

5
gregw

Eh bien, j'ai rencontré ce problème parce que j'ai confondu le "http: //" avec "https: //"

0
vincent zhang