2012-12-04 3 views
0

Nous utilisons le mécanisme telnet pour envoyer une requête http au serveur et obtenir la réponse. Nous avons remarqué une chose étrange lors de l'utilisation de telnet pour l'envoi de la requête HTTP GET. La première méthode fonctionne dans la plupart des environnements, mais elle ne fonctionne pas dans un environnement. Mais la seconde méthode (au lieu du chemin relatif, utilisez le chemin complet) fonctionne bien dans cet environnement.Demande HTTP utilisant telnet n'obtenant aucune réponse

**

  • Method1:

**

(printf « GET /test.jsp HTTP/1.0 \ nAccept: */* \ Nuser-Agent: WatchDog \ n \ n "; dormez 9) | telnet xx.xx.xx.xx 8093 Essai xx.xxx.xx.xx ... Connecté à xx.xx.xx.xx. Le caractère d'échappement est '^]'.

Connexion fermée par un hôte étranger.

**

  • Method2:

**

(printf « GET http://xx.xx.xx.xx:8093/test.jsp HTTP/1.0 \ nAccept: */* \ Nuser-Agent: Watchdog \ n \ n "; dormez 9) | telnet xx.xx.xx.xx 8093

Trying xx.xx.xx.xx... 
Connected to xx.xx.xx.xx. 
Escape character is '^]'. 
HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Set-Cookie: JSESSIONID=91643475E80038EA8770CE6803EE320C; Path=/ 
Content-Type: text/html;charset=UTF-8 
Content-Language: zh-US 
Content-Length: 42 
Date: Mon, 03 Dec 2012 04:25:09 GMT 
Connection: close 

The Server is Running 

Connection closed by foreign host. 

Pourquoi le method1 ne fonctionne pas dans un seul environnement? avons-nous besoin de vérifier quelque chose dans cet environnement?

Pls vos suggestions ...

Merci, Sekhar

Répondre

1

HTTP/1.0 (RFC 1945) indique la fin de ligne être CR LF. Certains serveurs peuvent appliquer cette règle strictement. Essayez d'envoyer la requête avec \ r \ n comme des fins de ligne. L'envoi d'URI absolus est également réservé à l'usage des mandataires (section 5.1.2 de la RFC 1945).

Si différentes terminaisons de ligne et le style URI ne vous aide pas aurez à regarder la configuration des serveurs/mise en œuvre, je ne vois rien de mal avec la méthode 1.

1

Outre les fins de ligne qui must be \r\n et votre en-tête accepter qui devrait être */* au lieu de /, votre première demande n'a pas de nom d'hôte.

Un serveur HTTP 1.1 peut refuser des requêtes HTTP qui n'ont pas d'ensemble d'hôtes, soit dans l'URI de demande absolue, soit dans un en-tête d'hôte.

+0

"Un serveur HTTP 1.1 peut refuser des requêtes HTTP qui n'ont pas de jeu d'hôtes, soit dans l'URI de requête absolue, soit dans un en-tête d'hôte" -> Pouvez-vous me dire dans quels cas cela peut se produire? parce que nous envoyons une requête HTTP au serveur HTTP 1.1 sans hôte et en utilisant un chemin relatif qui fonctionne bien dans la plupart des environnements. – Sekhar

+0

@Sekhar non, c'est un détail d'implémentation qui devrait être vérifié avec le fabricant de votre serveur web. RFC indique que le serveur peut essayer d'utiliser des heuristiques (par exemple, l'examen du chemin URI pour quelque chose d'unique à un hôte particulier) afin de déterminer quelle ressource exacte est demandée. "_] (Http: // tools .ietf.org/html/rfc2616 # section-5.2). Si vous réparez simplement votre requête, c'est-à-dire faites une requête HTTP valide contenant un hôte, soit en en-tête ou en URL, et '\ r \ n' pour séparer les en-têtes, cela devrait fonctionner pour tous les serveurs. – CodeCaster

Questions connexes