-->

Anuncio!

Protocolo HTTP

 

"Aqui estou eu, e aí está você, lendo o que escrevi e possivelmente interessado no conteúdo desse post e desta página.". Utilizamos páginas web diariamente para nos atualizarmos sobre assuntos, ler notícias, ou simplesmente, a razão que considero a mais fundamental, partilhar conhecimento. Afinal, você sabe como funciona um dos agentes principais quando se trata de uma página requisitada que chegue ao seu processo(navegador) de forma que você consiga ler o que está lendo agora?

O HTTP

O protocolo HTTP é um  protocolo que age sobre o TCP, e é responsável por ditar como os clientes requisitam páginas dos servidores e como esses servidores respondem aos requisitos dos clientes. O protocolo HTTP é definido no RFC[2616].

Alguns conceitos

Para que possamos entender como o HTTP e seus auxiliares funcionam, precisamos entender a nomenclatura básica de agentes da web. Uma página é consistida de um arquivo-base HTML, e múltiplos objetos referenciados a esse arquivo. Um objeto nada mais é que um arquivo. Por exemplo, um arquivo .JPEG, ou um vídeo. Existem várias formas de enviar esses objetos quando requisitados. Quando um processo(lado cliente) requisita uma página a um processo(lado servidor), a mensagem parte do processo cliente, passa por seu socket, e é entregue ao TCP para que envie a mensagem de requisição ao lado TCP do servidor que passa para o seu socket que chega ao seu processo que faz a análise do pacote e então mostra o conteúdo do pacote. Veja que a partir do momento em que a mensagem chega ao TCP(lado cliente), ou sai do TCP(lado servidor), ou vice-versa, ele por si só fica responsável de entregar a mensagem, o que realmente o faz. Desta forma, não cabe ao HTTP se preocupar com isto. "Dividir para conquistar.".

Conceito de socket

Não vamos nos prender a todas as funcionalidades e múltiplas definições de sockets, mas para que você entenda o contexto da comunicação é necessário que você saiba no mínimo de maneira abstrata o que é um socket. Um socket, em difinição simples, é a interface entre a camada de aplicação(processo) e a camada de transporte(tcp). O socket é responsável pela comunicação de rede entre processos de máquina distintas. Dois parâmetros são importantes quando citamos o papel do socket na comunicação: para que o servidor esteja ativo à atender a requisição do cliente ele precisa desses dois parâmetros que são: endereço ip e endereço da porta do protocolo de conexão. A porta HTTP fundamentalmente conhecida é a 80, sendo HTTPS 443.



 

Entenda o contexto

O HTTP abre uma conexão com o servidor através do TCP. Uma vez estabelecido o processo do three-way-handshake, na terceiro parte do reconhecimento, o lado cliente envia sua requisição da página através do HTTP, assim o servidor recebe a requisição e envia uma resposta com o objeto requisitado pelo cliente. Este é o modo mais simples de você entender a troca de mensagens. No entanto, existem formas diversificadas de conexões. Persistentes ou não persistentes.



[embed]https://www.youtube.com/watch?v=fhAXgcD21iE[/embed]

Conexões persistentes e não persistentes

Quando se trabalha com o HTTP e aplicações, quem programa a aplicação precisa lidar com a decisão de como os dados vão ser enviados, de modo que, se utilizará múltiplas conexões TCP para transportar os arquivos, de forma que cada arquivo seja transportado por uma conexão TCP ou uma conexão TCP ficará aberta para receber todos os arquivos e depois se encerrará? O primeiro exemplo é de conexões não persistentes e o segundo com conexões persistentes. Conexões não persistentes geram um tempo maior no envio de objetos já que para cada objeto solicitado é preciso abrir uma conexão, enviar o objeto, encerrar a conexão e assim repetir o processo para cada objeto solicitado. Já a conexão persistente possibilita uma velocidade maior no envio de objetos e um modo mais prático, possibilitando que seja enviado todos os objetos por uma mesma conexão TCP e após o envio, seja encerrada. Outro método de enviar mensagens por conexões persistentes seria por pipeline.



Imagem(a): conexão não persistente

Imagem(b e c): conexão persistente e por pipeline

 

Formato da mensagem,  métodos e códigos de estado

Mensagem de requisição



A forma mais simples de aprender sobre mensagens de requisição é analisando-as.

Mensagens HTTP são transmitidas no padrão ASCII comum. Uma mensagem de requisição é constituída por cinco linhas. Vamos analisar uma a uma.

Linha 1(linha de requisição): A primeira linha estabelece o método, o URL e a versão do HTTP. a maioria das mensagens HTTP utiliza o método GET(lê uma página web), quando o processo requisita uma página web, onde tal informação está contida na URL. Por fim, a versão do HTTP que o navegador utiliza, que neste exemplo, HTTP/1.1, é a versão 1.1.

Linha 2,3,4 e 5(linhas de cabeçalho): A linha 2, onde está a informação Host: www.someschool.edu, especifica onde o objeto requisitado está. Na linha 3, o navegador está dizendo ao servidor que não quer estabelecer conexões persistentes, por isso o close. A linha 4, User-agent: Mozilla/5.0, especifica o navegador cliente utilizado e sua versão, pois é importante que o servidor saiba com qual tipo de navegador está lidando pois recebe requisições de navegadores, versões e sistemas diferentes o tempo todo. Por fim, a linha 5, diz respeito a linguagem que o usuário prefere receber a informação. Se o servidor não possuir uma versão em tal linguagem, mandará a informação em sua linguagem nativa.



imagem: formato mensagem de requisição

 

Mensagem de resposta



Faremos a mesma abordagem com a mensagem de resposta, como fizemos com a mensagem de requisição.

A mensagem de resposta é divida em linha de estado, linha de cabeçalho e corpo de identidade, que seria a parte onde os dados requisitados são alocados para envio ao cliente.

Linha 1: a linha de estado se divide entre versão do protocolo, o código de estado e uma mensagem correspondente. Neste exemplo, é o 200 OK, onde o servidor diz que encontrou o arquivo requisitado. Provavelmente você já se deparou com o famoso 404 Not Found, um código de estado que determina uma página não encontrada.

Linhas 2, 3, 4, 5, 6 e 7: Na linha dois está estabelecido uma conexão fechada, ou seja, não persistente, na linha 3 indica a data e hora que a mensagem foi encontrada e enviada pelo servidor. A linha 4 indica a versão do servidor utilizado, neste exemplo, Apache2.2.3 (CentOS). Semelhante a linha User-agent na mensagem de requisição. a linha de cabeçalho Last-Modified, indica a data em que o arquivo foi criado ou modificado. Esta linha é importante, pois quando se trata de WebCaches ou servidores proxy, esta linha tem suma importância porque os mesmos dependem dela para saber se ouve modificações nos arquivos em cache. Falaremos sobre como os servidores caches são importantes para o descongestionamento de tráfego na internet e seus papéis no armazenamento de objetos em outro post. As linhas restantes, Content-Length e Content-Type, indicam a quantidade de bytes do arquivo e o tipo de dados contidos no arquivo.

 



imagem: formato mensagem de resposta



imagem: códigos de estado

 

 

Agora você já sabe como esta página chegou até você para que possa ler sobre este conteúdo.

O HTTP mostrou-se um protocolo fundamental desde a criação da web. Padronizando os métodos de comunicação e como os hosts recebem esta informação. Assim como outros protocolos, é uma peça de funcionamento de um grande quebra-cabeça que conhecemos como Internet.

 

 
Compartilhar:
← Anterior Proxima → Inicio

Nenhum comentário:

Postar um comentário

Formulário de contato

Nome

E-mail *

Mensagem *

Sites Parceiros

Anuncio No Post

Anuncio No Post

Anuncio Aqui!