68 votes

Qu'est-ce qui est nécessaire, au minimum, pour une requête HTTP ?

J'essaie d'envoyer une commande GET à mon serveur local en utilisant la méthode suivante netcat en procédant comme suit :

echo -e "GET / HTTP/1.1\nHost: localhost" | nc localhost 80

Malheureusement, je reçois un HTTP/1.1 400 Bad Request réponse pour cela. Qu'est-ce qui est requis, au minimum, pour une requête HTTP ?

5voto

jch Points 631

S'il vous plaît, s'il vous plaît, s'il vous plaît, n'implémentez pas votre propre client HTTP sans avoir lu au préalable les spécifications correspondantes. Veuillez lire et vous assurer que vous avez bien compris au moins les points suivants RFC 2616 . (Et si vous êtes ambitieux, les RFC 7230 à 7235).

Si HTTP semble être un protocole facile à utiliser, il comporte en réalité un certain nombre de points subtils. Quiconque a écrit un serveur HTTP vous parlera des solutions de contournement qu'il a dû mettre en œuvre pour faire face à des clients incorrects mais largement déployés. À moins que vous n'aimiez lire les spécifications, veuillez utiliser une bibliothèque de clients bien établie ; Curl est un bon choix, mais je suis sûr qu'il y en a d'autres.

Si vous voulez mettre en place le vôtre :

  • n'utilisez pas HTTP/0.9 ;
  • HTTP/1.0 requiert la ligne de requête et la ligne vide ;
  • dans HTTP/1.1, le Host: La tête est obligatoire en plus de ce qui précède.

En omettant le Host: dans HTTP/1.1 est la cause la plus courante des erreurs 400.

0voto

Dor Points 3731

0voto

Marcel Points 737

Le minimum vraiment vraiment faible n'est pas d'utiliser netcat, mais d'utiliser bash lui-même :

user@localhost:~$ exec 3<>/dev/tcp/127.0.0.1/80
user@localhost:~$ echo -e "GET / HTTP/1.1\n" >&3
user@localhost:~$ cat <&3
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.6
Date: Mon, 13 Oct 2014 17:55:55 GMT
Content-type: text/html; charset=UTF-8
Content-Length: 514

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
<ul>
</ul>
<hr>
</body>
</html>
user@localhost:~$

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X