TP02. HTTP Redes de Computadores
Objetivos Uma introdução ao protocolo HTTP Um olhar com algum detalhe para dentro do protocolo
Noções básicas Uma página web consiste num conjunto de objetos Ficheiros HTML, imagens (JPEG, PNG, etc.), applets, ficheiros de audio e vídeo, etc. Uma página web consiste num ficheiro HTML-base que inclui várias referências para outros objetos Cada objeto é identificado por um URL: http://moodle.ciencias.ulisboa.pt/course/view.php?id=2213 Protocolo Nome do host Caminho (path name)
HTTP: visão macro Protocolo do nível de aplicação application transport network data link physical application transport network data link physical application transport network data link physical
HTTP: visão micro Segue modelo cliente/servidor Utiliza TCP como protocolo de transporte PC a correr Google Chrome Servidor a executar Apache Web server Telemóvel a correr browser Safari
Sessão HTTP típica Utilizador digita num browser: http://gaia.cs.umass.edu/wireshark-labs/intro-wireshark-file1.html O browser traduz o URL gaia.cs.umass.edu num endereço IP e tenta estabelecer uma ligação TCP no porto 80 desse endereço Quando a ligação é estabelecida, o browser envia um pedido: GET /wireshark-labs/intro-wireshark-file1.html HTTP/1.1 HOST: gaia.cs.umass.edu Espaço em branco! O servidor responde com: Um conjunto de cabeçalhos que indicam qual o protocolo que está a ser usado, se o ficheiro foi encontrado, o tamanho do ficheiro (em bytes) e que tipo de informação está contida no ficheiro Uma linha em branco a indicar que terminou o cabeçalho Os conteúdos da página Se o browser encontrar imagens (ou outros objetos) embutidas na página então inicia um pedido (em separado) para cada uma das imagens A ligação TCP mantem-se ligada um pouco mais à espera de pedidos, e se não surgir mais nenhum é fechada
demo $ telnet gaia.cs.umass.edu 80 Trying 128.119.245.12... Connected to gaia.cs.umass.edu. Escape character is '^]'. GET /wireshark-labs/intro-wiresharkfile1.html HTTP/1.1 HOST: gaia.cs.umass.edu Espaço em branco! HTTP/1.1 200 OK Date: Mon, 28 Sep 2015 12:39:06 GMT Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.4.16 mod_perl/2.0.9dev Perl/v5.16.3 Last-Modified: Mon, 28 Sep 2015 05:59:01 GMT ETag: "51-520c864e32cfe" Accept-Ranges: bytes Content-Length: 81 Content-Type: text/html; charset=utf-8 Espaço em branco! <html> Congratulations! You've downloaded the first Wireshark lab file! </html> Connection closed by foreign host. Início da sessão (estabelecimento de ligação TCP) Pedido HTTP enviado pelo cliente Cabeçalhos HTTP da resposta do servidor Web Corpo da resposta do servidor Web Fim da sessão
Pedido HTTP método sp url sp versão cr lf nome cabeçalho valor cr lf Linha do pedido ~ ~ Cabeçalhos nome cabeçalho cr lf valor cr lf Espaço em branco (carriage return, line feed) indica fim dos cabeçalhos corpo da mensagem ~ ~ Corpo Linha do pedido Cabeçalhos Espaço em branco GET /index.html HTTP/1.1\r\n Host: www-net.cs.umass.edu\r\n User-Agent: Firefox/3.6.10\r\n Accept: text/html,application/xhtml+xml\r\n Accept-Language: en-us,en;q=0.5\r\n Accept-Encoding: gzip,deflate\r\n Accept-Charset: ISO-8859-1,utf-8;q=0.7\r\n Keep-Alive: 115\r\n Connection: keep-alive\r\n \r\n
HTTP 1.0 GET Tipos de método dados de entrada estão incluídos no campo URL Exemplo: www.somesite.com/animalsearch?monkeys&banana POST HEAD dados de entrada estão incluídos no corpo da mensagem Pede ao servidor que envie apenas o cabeçalho HTTP 1.1 GET, POST, HEAD PUT Faz upload do ficheiro que está no corpo para o caminho (path) especificado no campo URL DELETE Apaga ficheiro no URL especificado
Resposta HTTP método sp código sp frase cr lf nome cabeçalho valor cr lf Linha do pedido ~ ~ Cabeçalhos nome cabeçalho cr lf valor cr lf Espaço em branco (carriage return, line feed) indica fim dos cabeçalhos corpo da mensagem ~ ~ Corpo Linha do pedido Cabeçalhos Espaço em branco Corpo HTTP/1.1 200 OK\r\n Date: Sun, 26 Sep 2010 20:09:20 GMT\r\n Server: Apache/2.0.52 (CentOS)\r\n Last-Modified: Tue, 30 Oct 2007 17:00:02 GMT\r\n ETag: "17dc6-a5c-bf716880"\r\n Accept-Ranges: bytes\r\n Content-Length: 2652\r\n Keep-Alive: timeout=10, max=100\r\n Connection: Keep-Alive\r\n Content-Type: text/html; charset=iso-8859-1\r\n \r\n data data data data data...
Códigos de resposta: categorias 1xx: informação 100 Continue (continuar a enviar o pedido) 2xx: sucesso 200 OK (pedido bem sucedido, recurso no corpo) 3xx: redirecionamento 301 Moved Permanently (recurso movido para outro URL) 302 Found (recurso movido temporariamente para outro URL) 304 Not Modified (documento não modificado) 4xx: erro no cliente 400 Bad Request (servidor não percebeu pedido, erro sintaxe) 401 Unauthorized (este pedido necessita de autenticação) 404 Not Found (recurso não existe no servidor) 5xx: erro no servidor 503 Service Unavailable (servidor não consegue responder ao pedido por estar sobrecarregado ou em manutenção)
HTTP: outros detalhes O HTTP é um protocolo stateless (sem estado) porque o servidor não guarda nenhuma informação sobre pedidos anteriores do cliente Como é que é resolvido o problema quando é necessário manter estado, sendo o protocolo stateless? Com cookies Tipos de ligação não persistentes Cada ligação serve para transmitir um objeto e depois é fechada Connection: close persistentes É possível pedir vários objetos utilizando sempre a mesma ligação Connection: keep-alive Só possível na versão HTTP 1.1
HTTP: outros detalhes Web caching Objetivo: satisfazer pedidos dos clientes sem envolver o servidor origem Utilizador configura o browser para aceder à Web via cache O browser envia todos os pedidos HTTP para a cache Se está em cache, a cache retorna o objeto Caso contrário a cache pede o objeto ao servidor origem, e depois encaminha-o para o cliente Reduz tempo de resposta e quantidade de tráfego para o servidor Servidor proxy cliente Servidor origem cliente Servidor origem
Objetivo: não enviar objeto se a cache tem uma versão atualizada Remove atraso de transmissão Reduz utilização da ligação A cache especifica a data do que está em cache no pedido HTTP If-modified-since: <data> A resposta do servidor não traz objeto se a cópia em cache estiver atualizada HTTP/1.0 304 Not Modified GET condicional cliente HTTP request msg If-modified-since: <data> HTTP response HTTP/1.0 304 Not Modified HTTP request msg If-modified-since: <data> HTTP response HTTP/1.0 200 OK <data> servidor Objeto não modificado antes de <data> Objeto modificado depois de <data>
Questionário Socrative final da aula