HTTP 1.0 vs 1.1

263

Alguém poderia me dar uma breve visão geral das diferenças entre HTTP 1.0 e HTTP 1.1? Passei algum tempo com os dois RFCs, mas não consegui fazer muita diferença entre eles. A Wikipedia diz o seguinte:

HTTP / 1.1 (1997-1999)

Versão Atual; conexões persistentes ativadas por padrão e funcionam bem com proxies. Também oferece suporte ao pipelining de solicitação, permitindo que várias solicitações sejam enviadas ao mesmo tempo, permitindo que o servidor se prepare para a carga de trabalho e potencialmente transfira os recursos solicitados mais rapidamente para o cliente.

Mas isso não significa muito para mim. Sei que esse é um assunto um pouco complicado, por isso não estou esperando uma resposta completa, mas alguém pode me dar uma breve visão geral das diferenças em um nível um pouco mais baixo?
Com isso, quero dizer que estou procurando as informações que eu precisaria saber para implementar um servidor HTTP ou aplicativo. Estou principalmente procurando um empurrão na direção certa, para que eu possa descobrir sozinho.

Jason Baker
fonte
Este é um bom resumo das principais diferenças: http://www.research.att.com/~bala/papers/h0vh1.html
Kev
3
Bom em você por ir à fonte. Parece que você não sabe muito sobre redes em geral, se não entender esse resumo. Talvez você deva pesquisar esses termos também.
Marcin
4
Embora eu ainda seja um novato no que diz respeito a essas coisas, minha principal questão é que o resumo me fornece mais o "o que" e não o "como".
21468 Jason Baker

Respostas:

363

Suporte de proxy e o campo Host:

O HTTP 1.1 possui um cabeçalho de host necessário por especificação.

O HTTP 1.0 não exige oficialmente um cabeçalho de host, mas não é necessário adicionar um, e muitos aplicativos (proxies) esperam ver o cabeçalho do host, independentemente da versão do protocolo.

Exemplo:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

Esse cabeçalho é útil porque permite rotear uma mensagem através de servidores proxy e também porque o servidor da Web pode distinguir entre sites diferentes no mesmo servidor.

Portanto, isso significa que se você tem blahblahlbah.com e helohelohelo.com, ambos apontando para o mesmo IP. Seu servidor da web pode usar o campo Host para distinguir qual site a máquina cliente deseja.

Conexões persistentes:

O HTTP 1.1 também permite que você tenha conexões persistentes, o que significa que você pode ter mais de uma solicitação / resposta na mesma conexão HTTP.

No HTTP 1.0, era necessário abrir uma nova conexão para cada par de solicitação / resposta. E após cada resposta a conexão seria fechada. Isso levou a alguns grandes problemas de eficiência devido ao TCP Slow Start .

Método OPÇÕES:

O HTTP / 1.1 introduz o método OPTIONS. Um cliente HTTP pode usar esse método para determinar as habilidades do servidor HTTP. É usado principalmente para o compartilhamento de recursos entre origens em aplicativos da web.

Armazenamento em cache:

O HTTP 1.0 tinha suporte para armazenamento em cache através do cabeçalho: If-Modified-Since.

O HTTP 1.1 expande muito o suporte ao armazenamento em cache usando algo chamado 'tag de entidade'. Se 2 recursos forem iguais, eles terão as mesmas tags de entidade.

O HTTP 1.1 também adiciona os cabeçalhos condicionais If-Unmodified-Since, If-Match, If-None-Match.

Também há outras adições relacionadas ao cache, como o cabeçalho Cache-Control.

100 Continuar status:

Há um novo código de retorno no HTTP / 1.1 100 Continue. Isso evita que um cliente envie uma solicitação grande quando esse cliente não tem certeza se o servidor pode processar a solicitação ou está autorizado a processar a solicitação. Nesse caso, o cliente envia apenas os cabeçalhos e o servidor informa ao cliente 100 Continue, vá em frente com o corpo.

Muito mais:

  • Autenticação Digest e autenticação de proxy
  • Novos códigos de status extras
  • Codificação de transferência em pedaços
  • Cabeçalho de conexão
  • Suporte aprimorado à compactação
  • Muito muito mais.
Brian R. Bondy
fonte
15
Observe que muitos servidores / proxies que afirmam querer HTTP / 1.0 ficarão muito chateados se você omitir o cabeçalho Host.
Paul Tomblin
2
O HTTP 1.0 tem suporte para compactação através do cabeçalho Content-Encoding. Como Paul mencionou, eu recomendaria definitivamente qualquer cliente HTTP / 1.0 para enviar o cabeçalho Host, uma vez que não é estritamente proibido fazer isso e as coisas funcionarão com mais freqüência como você espera. Caso contrário, isso está morto.
Cpm
@ Paul Tomblin: Obrigado, eu adicionei esta informação.
Brian R. Bondy
2
Em relação a "se você tem blahblahlbah.com e helohelohelo.com ambos apontando para o mesmo IP. Seu servidor da Web pode usar o campo Host para distinguir qual site a máquina cliente deseja". Então, o que acontece quando um cliente HTTP 1.0 não nos fornece nenhum campo de host para distinguir?
Pacerier 15/07/12
@Pacerier geralmente é uma página padrão de algum tipo; isso depende do servidor.
Andrew Lambert
14

 HTTP 1.0 (1994)

  • Ainda está em uso
  • Pode ser usado por um cliente que não pode lidar com respostas do servidor em partes (ou compactadas)

 HTTP 1.1 (1996-2015)

  • Formaliza muitas extensões da versão 1.0
  • Suporta conexões persistentes e em pipeline
  • Suporta transferências em pedaços, compressão / descompressão
  • Suporta hospedagem virtual (um servidor com um único endereço IP que hospeda vários domínios)
  • Suporta vários idiomas
  • Suporta transferências de faixa de bytes; útil para retomar transferências de dados interrompidas

O HTTP 1.1 é um aprimoramento do HTTP 1.0. A seguir, estão listadas as quatro principais melhorias:

  1. Uso eficiente de endereços IP, permitindo que vários domínios sejam atendidos a partir de um único endereço IP.

  2. Resposta mais rápida, permitindo que um navegador da web envie várias solicitações por uma única conexão persistente.

  3. Resposta mais rápida para páginas geradas dinamicamente, com suporte à codificação em blocos, que permite que uma resposta seja enviada antes que seu tamanho total seja conhecido.
  4. Resposta mais rápida e grande economia de largura de banda, adicionando suporte a cache.
i_thamary
fonte
9

Para aplicações triviais (por exemplo, recuperar esporadicamente um valor de temperatura de um termômetro ativado pela Web), o HTTP 1.0 é bom tanto para um cliente quanto para um servidor. Você pode escrever um cliente ou servidor HTTP 1.0 baseado em soquete básico em cerca de 20 linhas de código.

Para cenários mais complicados, o HTTP 1.1 é o caminho a percorrer. Espere um aumento de 3 a 5 vezes no tamanho do código para lidar com os meandros do protocolo HTTP 1.1 mais complexo. A complexidade vem principalmente, porque no HTTP 1.1 você precisará criar, analisar e responder a vários cabeçalhos. Você pode proteger seu aplicativo dessa complexidade solicitando que um cliente use uma biblioteca HTTP ou que um servidor use um servidor de aplicativos da web.

Diomidis Spinellis
fonte
7

Um problema importante de compatibilidade é o suporte para conexões persistentes . Recentemente, trabalhei em um servidor que "suportava" o HTTP / 1.1, mas não conseguiu fechar a conexão quando um cliente enviou uma solicitação HTTP / 1.0. Ao escrever um servidor que suporte HTTP / 1.1, verifique se ele também funciona bem com clientes somente HTTP / 1.0.

Troy J. Farrell
fonte
8
HTTP / 1.1 exige que sejamos compatíveis com HTTP / 1.0?
Pacerier 15/07/12
@Troy - É válido enviar uma resposta a uma solicitação HTTP 1.1 e fechar imediatamente a conexão (soquete em que a solicitação foi lida no servidor)? O que praticamente significa que os implementos servidor HTTP 1.0
Guy Avraham
5

Uma das primeiras diferenças que me lembro da cabeça são vários domínios em execução no mesmo servidor, recuperação parcial de recursos, isso permite recuperar e acelerar o download de um recurso (é o que quase todo acelerador de download faz).

Se você deseja desenvolver um aplicativo como um site ou similar, não precisa se preocupar muito com as diferenças, mas deve saber a diferença entre GETePOST pelo menos verbos.

Agora, se você deseja desenvolver um navegador, sim, precisará conhecer o protocolo completo e se está tentando desenvolver um servidor HTTP.

Se você está interessado apenas em conhecer o protocolo HTTP, recomendo que você comece com HTTP / 1.1 em vez de 1.0.

Leandro López
fonte
1
Methinks Jason já sabe a diferença entre GET e POST se estiver pensando em construir seu próprio servidor / aplicativo HTTP desde o início. :)
Kev
1
Na verdade, eu trabalhei com um servidor da Web que atualmente suporta apenas o HTTP 1.0. Fiquei me perguntando o que está envolvido na adição do suporte à 1.1.
21468 Jason Baker
2

O HTTP 1.1 é a versão mais recente do Hypertext Transfer Protocol, o protocolo de aplicativo da World Wide Web que roda em cima do conjunto de protocolos TCP / IP da Internet. comparado ao HTTP 1.0, o HTTP 1.1 fornece entrega mais rápida de páginas da Web do que o HTTP original e reduz o tráfego na Web.

Tráfego na Web Exemplo: por exemplo, se você estiver acessando um servidor. Ao mesmo tempo, muitos usuários estão acessando o servidor para obter os dados. Há uma chance de travar o servidor. Este é o tráfego da Web.

Krishna Mohan
fonte
1

O HTTP 1.1 vem com o cabeçalho do host em sua especificação, enquanto o HTTP 1.0 não possui oficialmente um cabeçalho de host, mas não se recusa a adicioná-lo.

O cabeçalho do host é útil porque permite ao cliente rotear uma mensagem por todo o servidor proxy, e a principal diferença entre as versões 1.0 e 1.1 das HTTP são:

  1. O HTTP 1.1 vem com conexões persistentes que definem que podemos ter mais de uma solicitação ou resposta na mesma conexão HTTP.
  2. enquanto no HTTP 1.0 você precisa abrir uma nova conexão para cada solicitação e resposta
  3. No HTTP 1.0, ele tem um pragma, enquanto no HTTP 1.1, ele tem controle de cache, isso é semelhante ao pragma.
Niraj Kumar Jena
fonte
0

Comparado com o 1.0, 1.1 reduz o tráfego na web

Ram MVS
fonte