diferença entre a programação de socket e a programação Http

116

Qual é a diferença entre a programação de soquete e a programação Http? Alguém pode ajudar por favor?

Pensador inovador
fonte

Respostas:

109

HTTP é um protocolo de aplicativo. Basicamente, significa que o próprio HTTP não pode ser usado para transportar informações de / para um ponto de extremidade remoto. Em vez disso, ele depende de um protocolo subjacente que, no caso do HTTP, é o TCP.

insira a descrição da imagem aqui

Você pode ler mais sobre camadas OSI se estiver interessado.

Os soquetes, por outro lado, são uma API fornecida pela maioria dos sistemas operacionais para comunicar-se com a rede. A API de soquete suporta diferentes protocolos da camada de transporte e abaixo.

Isso significa que se você quiser usar TCP, use sockets. Mas você também pode usar soquetes para se comunicar usando HTTP, mas então você tem que decodificar / codificar mensagens de acordo com a especificação HTTP ( RFC2616 ). Visto que isso pode ser uma tarefa enorme para a maioria dos desenvolvedores, também temos clientes prontos em nossos frameworks de desenvolvedor (como .NET), por exemplo, o WebClientou as HttpWebRequestclasses.

jgauffin
fonte
2
Portanto, ambos usam TCP, o que acontece é que o HTTP responde em um formato predefinido e o soquete fornece os dados retornados de outra extremidade de um soquete, certo?
आनंद
4
Sim. O TCP garante que tudo chegue (camada de transporte) e o HTTP informa o que os aplicativos da web devem fazer.
jgauffin de
25

Com o HTTP, você usa o protocolo HTTP de alto nível (que funciona em cima de um soquete). É sem sessão, o que significa que você envia uma solicitação de texto como GET google.come recebe texto ou dados binários em troca, depois que a conexão for fechada (em HTTP 1.1 conexões persistentes estão disponíveis)

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

Com os soquetes você vai para o nível mais baixo e controla a conexão e envia / recebe bytes brutos.

Exemplo:

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});
Anri
fonte
A conexão não é fechada a partir de HTTP 1.1.
Marquês de Lorne
@EJP: depende de como o Connectioncabeçalho está definido;)
jgauffin
@jgauffin Exatamente. Não está fechado à toa.
Marquês de Lorne
Verdade, mas esses são os detalhes que o OP descobrirá por si mesmo, junto com outras informações de 95% sobre este tópico.
Anri
13

Conexão HTTP

  • A conexão HTTP é um protocolo executado em um soquete.
  • A conexão HTTP é uma abstração de nível superior de uma conexão de rede.
  • Com a conexão HTTP, a implementação cuida de todos esses detalhes de nível superior e simplesmente envia uma solicitação HTTP (algumas informações de cabeçalho) e recebe uma resposta HTTP do servidor.

Conexão de soquete

  • Socket é usado para transportar dados entre sistemas. Ele simplesmente conecta dois sistemas, um endereço IP é o endereço da máquina em uma rede baseada em IP.
  • Com a conexão de soquete, você pode projetar seu próprio protocolo para conexão de rede entre dois sistemas.
  • Com a conexão Socket, você precisa cuidar de todos os detalhes de nível inferior de uma conexão TCP / IP.
Amit Yadav
fonte
1

A programação HTTP ou solicitação HTTP é usada para acoplamento frouxo e comunicação de tecnologia de linguagem neutra de plataforma, onde a programação de soquete é usada onde o sistema tem protocolo de especificação de linguagem

Mukund
fonte
1
O que você quer dizer com linguagem? Um aplicativo Java pode se comunicar com um aplicativo Python via sockets, por exemplo
Adam Hughes
Acho que o que ele quis dizer é que, geralmente, se você deseja conectar sistemas fracamente acoplados (ou totalmente diferentes), o HTTP é útil: um front-end construído com alguma tecnologia com uma construção apoiada com outra tecnologia, acessando recursos na web através de URLs. Ao passo que, normalmente, se você estiver usando protocolos de conexão de nível inferior como TCP / UDP, provavelmente estará orquestrando uma comunicação com sistemas com tecnologias semelhantes (por exemplo, diferentes aplicativos Java). Isto está certo? Estou tentando entender por mim mesmo.
Nicola Amadio
0

para que dois terminais possam se comunicar, eles devem seguir um conjunto de regras. no computador, esse conjunto de regras é denominado protocolo.

por exemplo, para um endpoint como um navegador e para outro como um servidor web, ambos devem seguir um conjunto de regras ou protocolo denominado http para poder se comunicar e trocar informações. então, na rede mundial de computadores e neste tipo de comunicação, apenas aqueles que falam com base neste protocolo http podem se comunicar com sucesso.

socket é apenas um endpoint. ele poderia seguir o protocolo http para entrar em uma comunicação em www como um cliente solicitando uma página ou poderia atuar como um servidor ouvindo conexões. ou talvez pudesse seguir outro conjunto de regras ou protocolos como ssh, ftp e se comunicar de outras maneiras.

agora na programação de soquete você pode fazer um soquete, vinculá-lo a um endereço ip e um número de porta para atuar como um número de porta e dizer a ele para seguir http, ssh, ftp ou o que você quiser com base nas comunicações que deseja usar soquete para.

Mgh Gh
fonte