différence entre la programmation de socket et la programmation Http


Réponses:


109

HTTP est un protocole d'application. Cela signifie essentiellement que HTTP lui-même ne peut pas être utilisé pour transporter des informations vers / depuis un point final distant. Au lieu de cela, il repose sur un protocole sous-jacent qui dans le cas de HTTP est TCP.

entrez la description de l'image ici

Vous pouvez en savoir plus sur les couches OSI si vous êtes intéressé.

Les sockets, quant à eux, sont une API fournie par la plupart des systèmes d'exploitation pour pouvoir communiquer avec le réseau. L'API socket prend en charge différents protocoles depuis la couche de transport et vers le bas.

Cela signifie que si vous souhaitez utiliser TCP, vous utilisez des sockets. Mais vous pouvez également utiliser des sockets pour communiquer en utilisant HTTP, mais vous devez ensuite décoder / encoder les messages selon la spécification HTTP ( RFC2616 ). Comme cela peut être une tâche énorme pour la plupart des développeurs, nous avons également préparé des clients dans nos frameworks de développement (comme .NET), par exemple WebClientles HttpWebRequestclasses ou .


2
Donc, les deux utilisent TCP, c'est juste que HTTP répond dans un format prédéfini et le socket donne les données renvoyées d'une autre extrémité d'une socket, non?
आनंद

4
oui. TCP s'assure que tout arrive (couche de transport) et HTTP indique ce que les applications Web doivent faire.
jgauffin

25

Avec HTTP, vous utilisez un protocole HTTP de haut niveau (qui fonctionne sur une socket). C'est sans session, ce qui signifie que vous envoyez une demande de texte comme GET google.comet recevez du texte ou des données binaires en retour, une fois la connexion fermée (dans HTTP 1.1, les connexions persistantes sont disponibles)

Exemple MSDN:

public static void Main (string[] args)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create (args[0]);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse ();

    Console.WriteLine ("Content length is {0}", response.ContentLength);
    Console.WriteLine ("Content type is {0}", response.ContentType);

    // Get the stream associated with the response.
    Stream receiveStream = response.GetResponseStream ();

    // Pipes the stream to a higher level stream reader with the required encoding format. 
    StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);

    Console.WriteLine ("Response stream received.");
    Console.WriteLine (readStream.ReadToEnd ());
    response.Close ();
    readStream.Close ();
} 

Avec les sockets, vous allez au niveau inférieur et contrôlez réellement la connexion et envoyez / recevez des octets bruts.

Exemple:

var remoteEndpoint=new IPEndPoint(IPAddress.Loopback, 2345);
var socket = new Socket(remoteEndpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(remoteEndpoint);
socket.Send(new byte[] {1, 2, 3, 4});

La connexion n'est pas fermée à partir de HTTP 1.1.
Marquis of Lorne

@EJP: dépend de la façon dont l'en- Connectiontête est défini;)
jgauffin

@jgauffin Exactement. Ce n'est pas fermé bon gré mal gré.
Marquis of Lorne

C'est vrai, mais ce sont les détails qu'OP va découvrir lui-même avec d'autres 95% d'informations sur ce sujet.
Anri

13

Connexion HTTP

  • La connexion HTTP est un protocole qui s'exécute sur une socket.
  • La connexion HTTP est une abstraction de niveau supérieur d'une connexion réseau.
  • Avec la connexion HTTP, l'implémentation prend en charge tous ces détails de niveau supérieur et envoie simplement une requête HTTP (certaines informations d'en-tête) et reçoit une réponse HTTP du serveur.

Connexion de prise

  • Socket est utilisé pour transporter des données entre les systèmes. Il connecte simplement deux systèmes ensemble, une adresse IP est l'adresse de la machine sur un réseau IP.
  • Avec la connexion par socket, vous pouvez concevoir votre propre protocole pour la connexion réseau entre deux systèmes.
  • Avec la connexion Socket, vous devez vous occuper de tous les détails de niveau inférieur d'une connexion TCP / IP.

1

La programmation HTTP ou la requête HTTP est utilisée pour un couplage lâche et une communication de technologie de langage indépendante de la plate-forme où la programmation de socket est utilisée lorsque le système a un protocole de spécification de langage


1
Qu'entendez-vous par langue? Une application java peut communiquer avec une application Python via des sockets par exemple
Adam Hughes

Je pense que ce qu'il veut dire, c'est que, généralement, si vous voulez connecter des systèmes faiblement couplés (ou totalement différents), HTTP est utile: une interface construite avec une technologie avec une construction soutenue avec une autre technologie, accédant aux ressources sur le Web via des URL. Alors qu'en général, si vous utilisez des protocoles de connexion de niveau inférieur comme TCP / UDP, vous orchestrez probablement une communication avec des systèmes dotés de technologies similaires (par exemple différentes applications Java). Est-ce correct? J'essaye de le comprendre moi-même.
Nicola Amadio

0

pour que deux terminaux puissent se parler, ils doivent tous deux suivre un ensemble de règles. en informatique, cet ensemble de règles est appelé protocole.

par exemple, pour un terminal comme un navigateur et pour un autre comme un serveur Web, ils doivent tous deux suivre un ensemble de règles ou un protocole appelé http pour pouvoir communiquer et échanger des informations. Ainsi, dans le World Wide Web et ce type de communications, seuls ceux qui parlent sur la base de ce protocole http pourraient réussir à se parler.

socket n'est qu'un point de terminaison. il pourrait suivre le protocole http pour entrer dans une communication dans www en tant que client demandant une page ou il pourrait agir comme un serveur écoutant les connexions. ou peut-être qu'il pourrait suivre un autre ensemble de règles ou de protocoles comme ssh, ftp et communiquer par d'autres moyens.

maintenant dans la programmation de socket, vous pouvez créer une socket, la lier à une adresse IP et un numéro de port pour agir comme un numéro de port et lui dire de suivre http, ssh, ftp ou tout ce que vous voulez en fonction des communications que vous souhaitez utiliser votre socket pour.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.