Hypertext Transfer Protocol




  HTTP
IFRS - Campus Porto Alegre
 Prof. Evandro Manara Miletto
 http://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
Comunicação entre cliente e servidor, com mesmas características

Identifica o cliente que inicia a comunicação

 A    A                                          A          A
 T                                                          T
 R                                                          R
 E                                                          E
 F                                                          F
Acessando recursos Web
	 	 	 <protocolo>://<servidor>/<caminho>

                  Protocolo de        Define o
              comunicação entre     endereço URL
               cliente e servidor




  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
Formato de requisição HTTP
                                               Especifica método
Request Line   GET /index.html HTTP/1.0          de requisição


     Header    Host: www.content-networking.com
      Lines    Date: BBBBBBBBBBBB
               User-Agent: Mozilla/5.0 (en) (WINNT; U)
               Accept-Language: en-us

   Carriage
    Return/
  Line Feed                                Especifica recurso via
                                                   URI
   Message                                     & metadados
               Content-length:
      Body     (Message Payload)
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
Métodos HTTP               (3/4)



 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              (4/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)
Exemplo Request/
    Response
Mensagem HTTP cliente
        request line
(GET, POST, HEAD..)    GET /somedir/page.html HTTP/1.0
                       Host: www.someScholl.edu
                       User-agent: Mozilla/4.0
       header lines
                       Accept: text/html, image/gif,image/jpeg
                       Accept-language:fr

   indica o final da    (extra carriage return, line feed)
        mensagem
Mensagem HTTP servidor
         status line
   (protocol status    HTTP/1.0 200 OK
code status phrase)    Date: Thu, 06 Aug 1998 12:00:15 GMT
       header lines    Server: Apache/1.3.0 (Unix)
                       Last-Modified: Mon, 22 Jun 1998 ......
                       Content-Length: 6821
                       Content-Type: text/html

   indica o final da    data data data data data ...
        mensagem
Principais Atributos de
 Requisição (request)
Host
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
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-Charset
Utilizado 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)
                                                                      Request           Servidor
        Cliente                                            Username: professor
                                                              Password: 12345

                                                                                                    Arquivo de seção
                  Response
                  Set Cookie: SESSION_ID = @#$%12wert
                                                                                                   @#$%12wert
Tempo




                                                                                                      Pode ser utilizado
                                                                                                        para guardar
                                                                                                       uma informação
                                                                             Response
                                                                                                         do usuário
                                                     Cookie: SESSION_ID = @#$%12wert

                                                                                                   Arquivo de seção

                  Conteúdo (HTML) para o professor                                            @#$%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 - Sucesso
200 (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.                                   requisição
   Exemplo: GET /index.html HTTP/1.1 Host: www.wikipedia.org

HTTP/1.1 302 Found                                                   resposta
Location: http://www.wikipedia.org/index.php
3xx - Redirecionamento

   303 (See Other) – Método correto de direcionar um cliente para um
   outro link.



   Exemplo:                                         resposta
HTTP/1.1 303 See Other
Location: http://www.example.org
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 é proibido
404 (Not Found) - O servidor não encontrou o recurso solicitado
5xx - Erro de Servidor
500 (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 80
     GET 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

HTTP - Visão geral

  • 1.
    Hypertext Transfer Protocol HTTP IFRS - Campus Porto Alegre Prof. Evandro Manara Miletto http://www.inf.poa.ifrs.edu.br/~evandro/
  • 2.
    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.
  • 3.
    Nível de Aplicação Comunicaçãoentre cliente e servidor, com mesmas características Identifica o cliente que inicia a comunicação A A A A T T R R E E F F
  • 4.
    Acessando recursos Web <protocolo>://<servidor>/<caminho> Protocolo de Define o comunicação entre endereço URL cliente e servidor Cliente Servidor
  • 5.
    Características do HTTP Usamecanismo 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
  • 6.
  • 7.
    Formato de requisiçãoHTTP Especifica método Request Line GET /index.html HTTP/1.0 de requisição Header Host: www.content-networking.com Lines Date: BBBBBBBBBBBB User-Agent: Mozilla/5.0 (en) (WINNT; U) Accept-Language: en-us Carriage Return/ Line Feed Especifica recurso via URI Message & metadados Content-length: Body (Message Payload)
  • 8.
    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.)
  • 9.
    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
  • 10.
    Métodos HTTP (3/4) 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
  • 11.
    Métodos HTTP (4/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)
  • 12.
  • 13.
    Mensagem HTTP cliente request line (GET, POST, HEAD..) GET /somedir/page.html HTTP/1.0 Host: www.someScholl.edu User-agent: Mozilla/4.0 header lines Accept: text/html, image/gif,image/jpeg Accept-language:fr indica o final da (extra carriage return, line feed) mensagem
  • 14.
    Mensagem HTTP servidor status line (protocol status HTTP/1.0 200 OK code status phrase) Date: Thu, 06 Aug 1998 12:00:15 GMT header lines Server: Apache/1.3.0 (Unix) Last-Modified: Mon, 22 Jun 1998 ...... Content-Length: 6821 Content-Type: text/html indica o final da data data data data data ... mensagem
  • 15.
    Principais Atributos de Requisição (request)
  • 16.
    Host 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
  • 17.
    User-Agent Possui informação sobreo “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
  • 18.
    Accept Pode ser utilizadopor 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)
  • 19.
    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
  • 20.
    Accept-Language O campo Accept-Languagepode 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
  • 21.
    Accept-Encoding Informa a codificaçãoaceita na resposta.Accept-Encoding: gzip significa que o client aceita, como codificação da resposta, gzip;
  • 22.
    Keep-Alive e Connection ConexãoHTTP 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.
  • 23.
    Keep-Alive e Connection http://en.wikipedia.org/wiki/File:HTTP_persistent_connection.svg
  • 24.
    Accept-Charset Utilizado para indicaro 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
  • 25.
    Accept-Language Informa o idiomaaceito 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.
  • 26.
    Referer Permite que ocliente 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.
  • 27.
    Cookie São dados trocadosentre 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
  • 28.
    Cookie (exemplo) Request Servidor Cliente Username: professor Password: 12345 Arquivo de seção Response Set Cookie: SESSION_ID = @#$%12wert @#$%12wert Tempo Pode ser utilizado para guardar uma informação Response do usuário Cookie: SESSION_ID = @#$%12wert Arquivo de seção Conteúdo (HTML) para o professor @#$%12wert
  • 29.
  • 30.
    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)
  • 31.
    2xx - Sucesso 200(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
  • 32.
    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. requisição Exemplo: GET /index.html HTTP/1.1 Host: www.wikipedia.org HTTP/1.1 302 Found resposta Location: http://www.wikipedia.org/index.php
  • 33.
    3xx - Redirecionamento 303 (See Other) – Método correto de direcionar um cliente para um outro link. Exemplo: resposta HTTP/1.1 303 See Other Location: http://www.example.org
  • 34.
    4xx - Errode 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 é proibido 404 (Not Found) - O servidor não encontrou o recurso solicitado
  • 35.
    5xx - Errode Servidor 500 (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
  • 36.
    Principais Atributos de Resposta (response)
  • 37.
    Content-Type e Content-Length Content-Typeindica 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
  • 38.
    Content-Encoding e Content-Language Content-Encodingindica 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.
  • 39.
    Location O campo deresposta 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
  • 40.
    Server O campo deresposta 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)
  • 41.
    Expires e Date Ocampo 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
  • 42.
    Exercício prático Simular umbrowser realizando uma requisição HTTP a um servidor Web Utilizar TELNET na porta 80 do servidor Ex: Ex: telnet www.google.com.br 80 GET http://www.google.com.br HTTP/1.0 [enter] [enter] [enter]
  • 43.
    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