differenza tra programmazione socket e programmazione HTTP


Risposte:


109

HTTP è un protocollo dell'applicazione. Fondamentalmente significa che HTTP stesso non può essere utilizzato per trasportare informazioni da / a un endpoint remoto. Invece si basa su un protocollo sottostante che nel caso di HTTP è TCP.

inserisci qui la descrizione dell'immagine

Puoi leggere di più sui livelli OSI se sei interessato.

I socket invece sono un'API fornita dalla maggior parte dei sistemi operativi per poter dialogare con la rete. L'API socket supporta diversi protocolli dal livello di trasporto e giù.

Ciò significa che se vuoi usare TCP usi i socket. Ma puoi anche usare i socket per comunicare usando HTTP, ma poi devi decodificare / codificare i messaggi secondo la specifica HTTP ( RFC2616 ). Poiché questo può essere un compito enorme per la maggior parte degli sviluppatori, abbiamo anche predisposto client nei nostri framework per sviluppatori (come .NET), ad esempio WebClientle HttpWebRequestclassi o .


2
Quindi entrambi usano TCP, è solo che HTTP risponde in un formato predefinito e il socket fornisce i dati come restituiti da un'altra estremità di un socket, giusto?
आनंद

4
Sì. TCP si assicura che tutto arrivi (livello di trasporto) e HTTP dice cosa dovrebbero fare le applicazioni web.
jgauffin

25

Con HTTP si utilizza un protocollo HTTP di alto livello (che funziona su un socket). È senza sessione, il che significa che invii richieste di testo come GET google.come ricevi in ​​cambio testo o dati binari, dopo che la connessione è stata chiusa (in HTTP 1.1 sono disponibili connessioni persistenti)

Esempio 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 ();
} 

Con i socket si va al livello inferiore e si controlla effettivamente la connessione e si inviano / ricevono byte grezzi.

Esempio:

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 connessione non viene chiusa da HTTP 1.1.
Marchese di Lorne

@EJP: dipende da come Connectionè impostata l' intestazione;)
jgauffin

@jgauffin Esattamente. Non è chiuso volenti o nolenti.
Marchese di Lorne

Vero, ma questi sono i dettagli che OP scoprirà se stesso insieme ad altre informazioni del 95% su questo argomento.
Anri

13

Connessione HTTP

  • La connessione HTTP è un protocollo che viene eseguito su un socket.
  • La connessione HTTP è un'astrazione di livello superiore di una connessione di rete.
  • Con la connessione HTTP l'implementazione si prende cura di tutti questi dettagli di livello superiore e invia semplicemente la richiesta HTTP (alcune informazioni di intestazione) e riceve la risposta HTTP dal server.

Connessione presa

  • Il socket viene utilizzato per trasportare i dati tra i sistemi. Collega semplicemente due sistemi insieme, un indirizzo IP è l'indirizzo della macchina su una rete basata su IP.
  • Con la connessione socket è possibile progettare il proprio protocollo per la connessione di rete tra due sistemi.
  • Con la connessione Socket devi occuparti di tutti i dettagli di livello inferiore di una connessione TCP / IP.

1

La programmazione HTTP o la richiesta HTTP viene utilizzata per l'accoppiamento lasco e la comunicazione della tecnologia del linguaggio indipendente dalla piattaforma in cui viene utilizzata la programmazione del socket dove il sistema ha un protocollo di specifica del linguaggio


1
Cosa intendi per lingua? Un'applicazione Java può comunicare con un'applicazione Python tramite socket, ad esempio
Adam Hughes

Penso che quello che intende dire sia che, di solito, se vuoi connettere sistemi liberamente accoppiati (o totalmente diversi), HTTP è utile: un frontend costruito con una certa tecnologia con una build supportata con un'altra tecnologia, che accede alle risorse sul web tramite URL. Mentre di solito se stai usando protocolli di connessione di livello inferiore come TCP / UDP, probabilmente stai orchestrando una comunicazione con sistemi con tecnologie simili (ad esempio diverse applicazioni Java). È giusto? Sto cercando di capirlo da solo.
Nicola Amadio

0

affinché due endpoint siano in grado di dialogare tra loro, dovrebbero entrambi seguire una serie di regole. nel computer questo insieme di regole è chiamato protocollo.

per esempio per un endpoint come un browser e per un altro come un server web, dovrebbero entrambi seguire una serie di regole o protocolli chiamati http per poter comunicare e scambiare informazioni. quindi nel world wide web e in questo tipo di comunicazioni solo coloro che parlano in base a questo protocollo http potrebbero parlare con successo tra loro.

socket è solo un endpoint. potrebbe seguire il protocollo http per entrare in una comunicazione in www come un client che richiede una pagina o potrebbe agire come un server in ascolto delle connessioni. o forse potrebbe seguire un altro insieme di regole o protocolli come ssh, ftp e comunicare in altri modi.

ora nella programmazione dei socket puoi creare un socket, associarlo a un indirizzo IP e un numero di porta che funga da numero di porta e dirgli di seguire http, ssh, ftp o qualunque cosa tu voglia in base alle comunicazioni che vuoi usare il tuo presa per.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.