Hypertext Transfer Protocol
HTTPIFRS - Campus Porto Alegre
Prof. Evandro Manara Milettohttp://www.inf.poa.ifrs.edu.br/~evandro/
O que é o HTTP
Protocolo de Transferência de Hipertexto - é um protocolo de comunicação (na camada de Aplicação do modelo TCP/IP) utilizado para transferência de dados na Internet.
Nível de Aplicação
A
T
R
E
F
A
T
R
E
F
A A
Comunicação entre cliente e servidor, com mesmas características
Identifica o cliente que inicia a comunicação
<protocolo>://<servidor>/<caminho>
Acessando recursos Web
Protocolo de comunicação entre cliente e servidor
Define o endereço URL
Cliente Servidor
Características do HTTP
Usa mecanismo de requisição-resposta (request/response)
Servidor aguarda conexões na porta 80
Servidor aceita ou não conexões
Localizador Universal de Recurso – URL
Comunicação é encerrada ao final da conexão
Funcionamento HTTP
3Imagem do Livro: Use a Cabeça! HTML com CSS e XHTML
Formato de requisição HTTPGET /index.html HTTP/1.0
Host: www.content-networking.comDate: BBBBBBBBBBBBUser-Agent: Mozilla/5.0 (en) (WINNT; U)Accept-Language: en-us
Header Lines
Carriage Return/
Line Feed
Especifica método de requisição
Especifica recurso via URI
& metadadosMessage Body
Content-length: (Message Payload)
Request Line
Métodos HTTP (1/4)
GET
Pedido de um recurso situado na URL especificada
HEAD
Idêntico ao GET entretanto o servidor enviará apenas o cabeçalho da resposta
É utilizado para obter informações de um recurso sem transferir os dados (testa de link quebrado, data de modificação, etc.)
Métodos HTTP (2/4)
POST
utilizado para solicitar que o servidor de origem aceite os dados que são incluídos na requisição
projetado para permitir as seguintes funções:
Postar uma mensagem para uma lista de e-mails, grupo de notícias, etc.
Prover uma forma de enviar dados por meio de formulários
PUT
Semelhante ao POST, PUT apenas atualiza um novo recurso no servidor enquanto o PUT envia dados para processamento
DELETE
elimina ou move um recurso para uma localização inacessível
Métodos HTTP (3/4)
TRACE
O objetivo to TRACE é verificar o que o servidor ou proxy está recebendo do cliente (eco)
Este método foi concebido com o objetivo de permitir a realização de diagnósticos e testes
Exercício: Experimente descobrir a rota (nodos) para chegar a um servidor Web (use tracert no prompt)
Métodos HTTP (4/4)
Exemplo Request/Response
Mensagem HTTP cliente
GET /somedir/page.html HTTP/1.0Host: www.someScholl.eduUser-agent: Mozilla/4.0Accept: text/html, image/gif,image/jpegAccept-language:fr
(extra carriage return, line feed)
request line (GET, POST, HEAD..)
header lines
indica o final da mensagem
Mensagem HTTP servidor
HTTP/1.0 200 OKDate: Thu, 06 Aug 1998 12:00:15 GMTServer: Apache/1.3.0 (Unix)Last-Modified: Mon, 22 Jun 1998 ......Content-Length: 6821Content-Type: text/html
data data data data data ...
status line (protocol status
code status phrase)
header lines
indica o final da mensagem
Principais Atributos de Requisição (request)
Identifica um página (site)
É representado por um endereço IPv4 ou um nome registrado
Se o host for um nome registrado então deve ser considerado um identificador indireto
O valor do host não pode ser nulo
Se a porta não for fornecida, a 80 é assumida como a padrão para serviços WWW
Host
User-Agent
Possui informação sobre o “agente” (cliente http) que originou a requisição HTTP
Navegadores podem ser considerados user-agent (Firefox, Opera, Safari, etc.)
Propósito: colher dados estatísticos, detecção de violação do protocolo e reconhecimento automático de clientes (adaptação ou limitações)
É recomendado que um cliente acrescente o user-agent na requisição (não é um campo obrigatório)
O campo pode conter comentários para identificar qualquer subproduto que faça parte do user-agent
Accept
Pode ser utilizado por clientes para especificar os tipos de mídias que são aceitáveis
Uma requisição pode ser limitada para um conjunto de tipos de mídia desejáveis (ex. requisição de apenas imagens)
O asterisco (*) é usado para agrupar tipos de mídias
O "*/*" indica todos os tipos de mídias enquanto "type/*" indica todas as mídias de um determinado tipo
Cada tipo de mídia pode ser seguido por um ou mais parâmetros, iniciando com "q" para indicar um fator de “qualidade”
Um fator de qualidade (q) permite o usuário indicar o grau relativo de "qualidade" para um tipo de mídia. A escala vai de 0 até 1 (valor padrão)
Accept (exemplo)
Exemplo:
Accept: text/plain; q=0.5, text/html,
text/x-dvi; q=0.8, text/x-c
O exemplo acima deve ser interpretado: "text/html e text/x-c são os tipos de mídia preferidos. Caso não exista, envie-me text/x-dvi. Se ainda não existir, envie-me os arquivos em text/plain
Assim, o valor “1” (ou maior) da qualidade deve ser interpretado como o formato preferido
Accept-Language
O campo Accept-Language pode ser utilizado por clientes HTTP para indicar o conjunto de linguagens naturais que são preferidos
O atributo de "qualidade" q também pode ser utilizado para indicar os idiomas preferidos
Exemplo:
Accept-Language: pt-br, en-us;q=0.9, en;q=0.8
Accept-Encoding
Informa a codificação aceita na resposta.Accept-Encoding: gzip
significa que o client aceita, como codificação da resposta, gzip;
Keep-Alive e Connection
Conexão HTTP persistente, usa uma conexão TCP única para enviar e receber múltiplas requisições/repostas HTTP
Ocorre de forma oposta a abrir uma nova conexão para cada requisição/resposta simples.
Keep-Alive e Connection
http://en.wikipedia.org/wiki/File:HTTP_persistent_connection.svg
Accept-CharsetUtilizado para indicar o padrão dos caracteres de resposta aceitáveis. Ex:
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
Informação complementar:
Iso-8859-5: http://en.wikipedia.org/wiki/ISO/IEC_8859-5
Unicode: http://pt.wikipedia.org/wiki/Unicode
Accept-Language
Informa o idioma aceito na resposta. Accept-Language: pt-br, pt;q=0.8 significa que o cliente prefere português brasileiro como idioma da resposta, mas aceita português se não tiver em português brasileiro.
Referer
Permite que o cliente especifique a URI de um recurso (página, vídeo, imagem, etc.) que deve ser visualizado
Este atributo também é geralmente utilizado pelos servidores para realizar cache de recursos mais acessados
Também permite que os servidores redirecione recursos obsoletos para páginas em manutenção, etc.
Cookie
São dados trocados entre o cliente e o servidor
Função principal: manter a persistência de sessões HTTP
Existiram muitas críticas ao conceito devido ao problema de segurança
Ex: segurança na utilização de computadores públicos
Cookie (exemplo)
ServidorCliente
Temp
o
RequestUsername: professor
Password: 12345
Arquivo de seção
@#$%12wertPode ser utilizado
para guardaruma informação
do usuário
ResponseSet Cookie: SESSION_ID = @#$%12wert
Conteúdo (HTML) para o professor
ResponseCookie: SESSION_ID = @#$%12wert
Arquivo de seção
@#$%12wert
Principais Códigos de Status HTTP
1xx - Informativos
100 (Continue) – Significa que o servidor recebeu uma parte inicial da requisição e está informando para o cliente que ele deve continuar enviando (por exemplo, no caso de um POST com muitos megas)
101 (Switching Protocols) – O servidor avisa para o cliente que irá modificar o protocolo de comunicação (por exemplo, uma nova versão de HTTP)
2xx - Sucesso200 (OK) - Resposta entregue corretamente
201 (Created) – Requisição executada e originou um novo recurso
202 (Accepted) – Requisição aceita mas ainda não realizada
203 (Non-Authoritative Information) – A resposta da requisição foi originada por outras fontes de dados, Ex. cache do navegador
204 (No Content) - O servidor recebeu a requisição mas não há informação para devolver (página sem conteúdo)
205 (Reset Content) - O servidor indica ao navegador para suprimir o conteúdo dos campos de formulário
3xx - Redirecionamento
301 (Moved) – O recurso solicitado foi transferido para um novo endereço. Assim, o cliente pode guardar esta nova localização
302 (Found) – O recurso alvo reside numa localização diferente. Isto acontece num redirecionamento, assim, o cliente deve utilizar o link correto numa requisição futura.
Exemplo: GET /index.html HTTP/1.1 Host: www.wikipedia.org
HTTP/1.1 302 FoundLocation: http://www.wikipedia.org/index.php
requisição
resposta
3xx - Redirecionamento
303 (See Other) – Método correto de direcionar um cliente para um outro link.
Exemplo:
HTTP/1.1 303 See OtherLocation: http://www.example.org
resposta
4xx - Erro de Cliente
400 (Bad Request) - A sintaxe do pedido está mal formulada
401 (Unauthorized) - O cliente não está autorizado a acessar um recurso. Deve refazer a requisição passando suas credenciais (ex: usuário e senha)
402 (Payment Required) - Pede para o cliente refazer a requisição passando dados para pagamento
403 (Forbidden) - O acesso ao recurso é proibido404 (Not Found) - O servidor não encontrou o recurso solicitado
5xx - Erro de Servidor500 (Internal Error) - O servidor encontrou uma condição inesperada (sistema mal implementado)
501 (Not Implemented) - O servidor não suporta o serviço pedido
502 (Bad Gateway) - O servidor está recebendo uma resposta inválida de um outro servidor (ex: servidor de stream de vídeo)
503 (Service Unavaiable) - O servidor não pode responder no momento
504 – GATEWAY TIMEOUT - A resposta do servidor foi muito longa esgotando o tempo
Principais Atributos de Resposta (response)
Content-Type e Content-Length
Content-Type indica o tipo de conteúdo do corpo da resposta
Exemplos: text/html, application/pdf, etc.
Content-Length indica o tamanho do corpo da mensagem de resposta
Content-Encoding e Content-Language
Content-Encoding indica o tipo de codificação utilizada na resposta. Por exemplo, compress, deflate, gzip, etc.
Content-Language indica o tipo de língua utilizada no corpo da mensagem. Por exemplo, pt-br, en-us, etc.
Location
O campo de resposta location é utilizado para identificar um novo recurso criado ou para redirecionar o cliente para uma localização (link) diferente
Se o status da resposta for 201 (created) então o servidor está indicando um novo recurso
Entretanto, o status 3xx indica que o servidor está indicando um novo link para o cliente fazer um redirecionamento
Server
O campo de resposta server contém informações sobre o software usado pelo servidor para manipular as requisições (servidor HTTP)
Exemplos de servidores HTTP:
Apache HTTP Server
Internet Information Services (IIS)
Expires e Date
O campo de resposta expires indica explicitamente para o cliente quando ele deve realizar novamente uma requisição para o servidor. Enquanto isto o cliente pode carregar a página da cache, etc.
Ex: Expires: Thu, 01 Dec 1994 16:00:00 GMT
O campo de propósito geral date indica o dia e a hora que uma mensagem foi enviada
Ex: Date: Tue, 15 Nov 1994 08:12:31 GMT
Exercício prático
Simular um browser realizando uma requisição HTTP a um servidor Web
Utilizar TELNET na porta 80 do servidor Ex:
Ex:
telnet www.google.com.br 80GET http://www.google.com.br HTTP/1.0 [enter][enter][enter]
Referências
RFCS (Request for Comments) HTTP 1.1
http://datatracker.ietf.org/wg/httpbis/
Tutoriais HTTP
http://pt.kioskea.net/contents/internet/http.php3
Baseado no material do Prof Rodrigo Prestes Machado
Top Related