Tópicos de Sistemas de Informação A Carlos Oberdan Rolim Ciência da Computação HTTP (Hypertext Transfer Protocol) Histórico Panorama do final da década de 80 Grande quantidade de mails Inicio de documentos contendo hyperlinks Versão HTTP/0.9 Em torno de 1990 Transferencia exclusiva de textos Somente possuia método GET Histórico Versão HTTP/1.0 Desenvolvida entre 1992-1996 RFC 1945 Supriu a necessidade de transferir apenas texto Passou a transferir mensagens do tipo MIME44 (Multipurpose Internet Mail Extension) Implementação dos métodos POST e HEAD Versão HTTP/1.1 RFC 2616 publicada em 19999 Conexões persistentes Uso de servidors proxy Novos métodos Versão utilizada atualmente Arquitetura Protocolo de aplicação de uso genérico O pedido é feito em ASCII e a resposta é do tipo MIME (RFC 822 e RFCs 2045, 2046, 2047, 2048, 2049) O protocolo não necessita de manutenção de estado associado aos pedidos dos clientes (stateless) Servidor recebe pedidos em TCP/IP no porto 80 (normalmente) servidor Pedido HTTP (GET …) Resposta MIME Arquitetura Papel do cliente Efetuar as requisições para o servidor seguindo os padrões definidos pelo protocolo Receber a resposta, interpreta-la e apresentar ao usuário Pode implementar mecanismos de cache Arquitetura Papel do servidor Servidor recebe a requisição A configuração do servidor determina se a requisição é a um documento estático ou gerado dinâmicamente por uma aplicação ( por exemplo um CGI) Se for um documento gerado dinamicamente servidor executa a aplicação e recebe a resposta da execução Documentos estáticos podem possuir “server side includes” Servidor retorna resposta ao cliente juntamente com cabeçalhos de resposta Pode implementar mecanismos de cache Sintaxe do protocolo Pedido HTTP Sintaxe <COMMAND> <Request-URI> HTTP/1.X <crlf> { <Header>: <Value> <crlf>}+ <crlf> [<data>] <Request-URI> Path absoluto relativamente à raiz do servidor Web, ou URI (URL) absoluto. Exemplo GET /index.html HTTP/1.1 Accept: */* (outros exemplos: text/plain; text/html; image/gif ) User-Agent: Mozilla4.0 (compatible; MSIE 5.0; Windows NT 5.0) Host: www.san.uri.br From: [email protected] * uma linha em branco * Sintaxe do protocolo Resposta HTTP Sintaxe HTTP/1.X <result-code> [<message>] <crlf> { <Header>: <Value> <crlf>}+ <crlf> [<data>] Exemplo HTTP/1.1 200 OK Date: Wednesday, 02-Feb-98 15:04:12 GMT Server: Apache1.3.6 (Unix) (Red Hat Linux) MIME-version: 1.0 Last-modified: Monday, 15-Nov-93 23:33:16 GMT Content-type: text/html Content-length: 2345 * linha em branco * <HTML><HEAD><TITLE> . . . </TITLE> . . .etc. Métodos HTTP GET obtém dados do recurso especificado POST Métodos mais utilizados envia dados ao servidor HEAD solicita apenas o cabeçalho HTTP PUT especifica que o corpo que está sendo enviado é para ser escrito na URL (inverso de GET) Métodos HTTP DELETE remove um recurso TRACE Usado para testes e diagnósticos CONNECT: Reservado para uso por proxies OPTIONS retorna quais métodos são suportados para um documento no servidor Códigos de resposta do servidor Códigos de retorno 2XX - códigos de OK 3XX - recolocação/redireccionamento 4XX - Erro no cliente 5XX - Erro no servidor Exemplos: 200 OK 201 Criado 204 Sem conteúdo 304 Não modificado 400 Pedido mal formado 401 Não tem autorização 501 Comando não implementado Cabeçalhos MIME Geral: informação não relacionada com a entidade a transferir Date: Tue, 15 Nov 1994 08:12:31 GMT MIME-Version: 1.0 Opções cliente: permite ao cliente passar informações acerca do pedido Accept: */* ou text/plain; text/html; image/gif User-Agent: Lynx/2.2 libwww/2.14 Range: bytes=0-499 If-Modified-Since: Thu, 25 Sep 1997 15:01:26 GMT Cookie:EGSOFT_ID=193.137.220.2-640807376.29152144; expires=Fri, 31-Dec-1997 0:00:00 GMT;path=/ Cabeçalhos MIME Resposta: informação sobre o servidor Server: Apache/1.2b7 Content-Range: bytes=0-499/2000 Set-Cookie: EGSOFT_ID=193.137.220.2-640807376.29152144; expires=Fri, 31-Dec-1997 0:00:00 GMT;path=/ Entidade: informação sobre os dados entre cliente e servidor Last-Modified: Thu, 25 Sep 1997 15:01:26 GMT Content-Length: 6575 Content-Type: text/html Expires: Thu, 25 Sep 1997 15:01:26 GMT Método GET Solicita um recurso Corpo sempre vazio Resposta: Pedido: GET /index.html HTTP/1.1 User-Agent: Mozilla/2.02Gold (WinNT; I...) Host: www.host.com Accept: image/gif, image/x-xbitmap, image/jpeg * a blank line * HTTP/1.1 200 Document follows Date: Fri, 20 Sep 1996 08:17:58 GMT Server: NCSA/1.5.2 Last-Modified: Mon, 17 Jun 1996 21:53:08 GMT Content-Type: text/html Content-Length: 2482 * a blank line * ... corpo do documento ... Método POST O cliente envia dados ao servidor no pedido (no corpo) O conteúdo do pedido é passado à aplicação que processa os dados Pedido: Resposta: (incompleta) POST /cgi-bin/post-query HTTP/1.1 Accept: */* User-Agent: Lynx/2.2 libwww/2.14 From: [email protected] Content-type: application/x-www-form-urlencoded Content-length: 150 Host: www.isel.pt Content-Type: text/html org=Academic%20Computing%20Services &users=10000 &browsers=lynx &browsers=cello &browsers=mosaic &others=MacMosaic%2C%20WinMosaic &contact=Michael%20Grobe%[email protected] <h1>Query Results</h1> You submitted the following name/value pairs: <ul> <li>org = Academic Computing Services </li> <li>users = 10000 </li> <li>browsers = cello </li> <li>browsers = lynx </li> <li>browsers = xmosaic </li> <li>others = Mac Mosaic, Win Mosaic </li> <li>contact = Michael Grobe [email protected] </ </ul> Método PUT Similar ao POST porém PUT pode apontar para um recurso que não existe ainda (será criado ou reescrito) Usado para publicação de páginas Método HEAD Pede de informações sobre o documento e não o documento em si. Data da última modificação, dimensão, tipo, etc. Corpo sempre vazio Resposta: Pedido: HEAD /index.html HTTP/1.1 Accept: */* Host: www.host.com * a blank line * HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Date: Tue, 10 Nov 1998 16:52:11 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Mon, 29 Dec 1997 01:55:11 GMT ETag: "10e93cccfc13bd1:37f9" Content-Length: 2604 Cookies HTTP O que são Cookies? Mecanismo que permite a aplicações HTTP servidoras guardar e obter informações sobre o cliente. Manutenção de informação de estado sobre o cliente. Que informação contém um Cookie Informação sobre o estado do cliente na forma de um par nome=valor ‘Range’ de URLs para o qual o estado é válido Data de validade (para o caso de Cookies persistentes) Cookies HTTP Sintaxe do header set-cookie na resposta HTTP Set-Cookie: {<NAME>=<VALUE>;}+ [expires=<DATE>;] [path=<PATH>;] [domain=<DOMAIN_NAME>;] [secure] <DATE> Wdy, DD-Mon-YYYY HH:MM:SS GMT Exemplo: Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/; expires=Wednesday, 09-May-1999 23:00:00 GMT Sintaxe do header cookie no pedido HTTP Cookie: {<NAME>=<VALUE>;}+ Exemplo: Cookie: CUSTOMER=WILE_E_COYOTE HTTPS (Hypertext Transfer Protocol Secure) HTTPS Implementação do HTTP sobre uma camada SSL (Secure Sockets Layer) ou TLS (Transport Layer Security) Dados transmitidos de forma criptografada através da negociação de uma chave publica gerada aleatóriamente no inicio da sessão Criptografia ocorre na camada de transporte Porta padrão TCP/443 URLs do tipo: https:// HTTPS HTTPS SSL TCP HTTPS Client Browser TCP Connect SSL Connect HTTPS GET transaction Web Server Exercicios Resolver os exercicios contidos no post na página da disciplina