HTTP

27
HTTP HTTP Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense

description

HTTP. Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense. Arquitetura. HTML – Como funciona o envio desta mensagem?.

Transcript of HTTP

Page 1: HTTP

HTTPHTTP

Carlos Bazilio

Depto de Ciência e TecnologiaPólo Universitário de Rio das Ostras

Universidade Federal Fluminense

Page 2: HTTP

ArquiteturaArquitetura

Page 3: HTTP

HTML – Como funciona o HTML – Como funciona o envio desta mensagem?envio desta mensagem?

<body> <form action=“processaForm.jsp" > Nome: <input type="text" name="firstname"><br /> Sobrenome: <input type="text" name="lastname"><br /> Senha: <input type="password" name="senha"> <input type="submit" value="Enviar"> </form></body>

• URL após clicar no botão: .../sirius/processaForm.jsp?firstname=Carlos&lastname=Bazilio&senha=abcdefg

Page 4: HTTP

Tipos de requisições HTTPTipos de requisições HTTP

• GET– Parâmetros são enviados na url da solicitação– http://localhost:8080/sirius/processaForm.jsp?

firstname=Carlos&lastname=Bazilio&senha=abcdefg – Envio de parâmetros firstname e lastname e senha

para um recurso no servidor (neste caso, uma página jsp – processaForm.jsp)

– Estas urls podem ser armazenadas como favoritos– Tipo padrão (default)– Não recomendado para o envio de informações

sigilosas

Page 5: HTTP

Tipos de requisições HTTPTipos de requisições HTTP

• POST– Parâmetros são enviados de maneira invisível para o

cliente (no cabeçalho da solicitação e não na url)– Com isso, a url não pode ser armazenada– Interessante para o envio de informações sigilosas

• HEAD– Solicitar apenas o cabeçalho da solicitação– Interessante quando se deseja saber o tamanho ou

data da atualização de um recurso

Page 6: HTTP

Tipos de requisições HTTPTipos de requisições HTTPPouco UtilizadosPouco Utilizados

• PUT– Colocar um documento diretamente no servidor

• DELETE– Remover um documento do servidor

• TRACE– Efetuar um debug da solicitação. Retorna para o

cliente o conteúdo exato da solicitação

• OPTIONS– Perguntar ao servidor que métodos ele suporta ou

que opções estão disponíveis para algum recurso particular

Page 7: HTTP

Exemplos de Requisição Exemplos de Requisição HTTPHTTP

GET / HTTP/1.1Host: www.siriusnet.com.brConnection: closeUser-agent: Mozilla/4.0Accept-language: fr

GET http://www.siriusnet.com.br/comochegar.html HTTP/1.1

GET / HTTP/1.1

Page 8: HTTP

Como testar uma Como testar uma requisição HTTPrequisição HTTP

• Uma forma simples é abrindo uma conexão com o servidor web desejado:

C:\...> telnet<Enter>telnet> set localecho<Enter>telnet> open www.siriusnet.com.br 80 <Enter>get / HTTP/1.1<Enter><Enter>

Configura o prompt local para que os comandos

sejam exibidos

Servidor a ser

conectadoPorta no servidor;

80 é a porta padrão http

Cabeçalho http

Page 9: HTTP

Formato de Requisição Formato de Requisição HTTPHTTP

<Método> <Url> <Versão><nome-campo-cabecalho_n> : <valor_n>...<nome-campo-cabecalho_n> : <valor_n>

Corpo da Requisição (possíveis parâmetros de uma requisição do tipo POST)

Documentação: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5

Page 10: HTTP

Alguns campos de Alguns campos de cabeçalho de requisiçãocabeçalho de requisição

• Host: ... Especifica o servidor no qual o objeto/recurso reside

• Connection: close Solicita ao servidor que feche a conexão após envio do objeto

• User-agent: ... Tipo de browser que faz a requisição

• Accept-language: ... Indica língua preferida para o recebimento do objeto

• If-Unmodified-Since: ... Indica ao servidor para enviar apenas uma versão atualizada do objeto

Page 11: HTTP

Exem

plo de Resposta

Exem

plo de Resposta

HT

TP

HT

TP

HTTP/1.0 200 OKDate: Wed, 21 Jan 2009 13:00:53 GMTServer: Microsoft-IIS/6.0X-Powered-By: ASP.NETContent-Length: 342Content-Type: text/htmlSet-Cookie: ASPSESSIONIDSSTTAADC=LNDHNMIDCHPLLEOPNAMFFGLE; path=/Cache-Control: privateX-Cache: MISS from CACHE-04Via: 1.1 CACHE-04:3128 (Cacheboy)Connection: close

<html><frameset cols="100%,*" framespacing="0" border="0" frameborder="0"> <frame src="home.asp"> <frame src="br.htm"><noframes> <body topmargin="0" leftmargin="0"> O seu navegador nπo suporta frames Para visualizar estß pßgina Θ necessßrio<br> usar um navegador atualizado </body></noframes></frameset></html>

Page 12: HTTP

Formato de Resposta Formato de Resposta HTTPHTTP

<Versão> <Código_Status> <Msg_Status><nome-campo-cabecalho_n> : <valor_n>...<nome-campo-cabecalho_n> : <valor_n>

Corpo da Resposta (mensagem HTML)

• Documentação: http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1.1

Page 13: HTTP

Códigos e Mensagens de Códigos e Mensagens de StatusStatus

• Alguns exemplos de códigos e mensagens que indicam o resultado de uma requisição:– 200 OK: Bem sucedida– 301 Moved Permanently: Objeto requisitado foi

removido permanentemente; A nova url é especificada no campo de cabeçalho Location, que é recuperada automaticamente pelo software do cliente

– 400 Bad Request: Requisição mal formatada– 404 Not Found: Documento inexistente no servidor– 505 HTTP Version Not Supported: Versão do

protocolo HTTP não suportada pelo servidor

Page 14: HTTP

Alguns campos de Alguns campos de cabeçalho de respostacabeçalho de resposta

• Connection: close Indica ao cliente que o servidor fechará a conexão (TCP) após enviar a mensagem

• Date: ... Data de geração da mensagem• Server: ... Identificação do servidor (análogo

a User:agent)• Last-Modified: ... Última modificação do

recurso no servidor• Content-Length: ... Tamanho do recurso• Content-Type: text/html Tipo do recurso

Page 15: HTTP

Lista de Campos de Lista de Campos de Cabeçalho GeraisCabeçalho Gerais

• Vários campos de cabeçalhos podem ser usados tanto em requisições quanto em respostas

• Uma lista completa pode ser obtida no site da W3C– http://www.w3.org/Protocols/rfc2616/rfc2616-

sec14.html#sec14

Page 16: HTTP

CookiesCookies

• O protocolo HTTP por si só não mantém estado entre requisições

• Cookies são uma forma de termos alguma informação de estado

• São compostos de 4 componentes:– Um cabeçalho de cookie na mensagem de resposta– Um cabeçalho na mensagem de requisição– Um arquivo de cookie mantido no cliente e

gerenciado pelo browser– Um banco de dados de apoio no site web

Page 17: HTTP

CookiesCookies

• Após uma primeira requisição do cliente, o servidor gera uma identificação para o usuário e insere o campo no cabeçalho da resposta:– Set-cookie: 1678453

• Nas futuras requisições do cliente, o browser irá inserir o cabeçalho abaixo para identificação do cliente– Cookie: 1678453

Page 18: HTTP

Conexão a servidores web Conexão a servidores web em Javaem Java

• O método setPage(String url) da classe javax.swing.JEditorPane recebe uma url e apresenta o conteúdo html renderizado

• Entretanto, imagine a situação em que queremos obter o texto de algum recurso html

• Como fazemos isso em Java?

Page 19: HTTP

Conexão a servidores web Conexão a servidores web em Javaem Java

• A comunicação entre servidores e clientes web é, na essência, uma comunicação via sockets

• Ou seja, um cliente (navegador, por exemplo) abre uma conexão com outra máquina na sua porta 80 (porta padrão http)

• Para tal, incialmente, utilizaremos classes do pacote java.net (Socket e InetAddress)

• A classe InetAddress representa o protocolo IP, e possui métodos úteis como a “conversão” de nomes de máquinas em ip’s

Page 20: HTTP

Conexão a servidores web Conexão a servidores web em Java - Socketem Java - Socket

String hostname = "www.siriusnet.com.br";int port = 80; InetAddress addr;try { // Cria conexão addr = InetAddress.getByName(hostname); Socket socket = new Socket(addr, port); // Prepara cabeçalho BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8")); wr.write("GET / HTTP/1.1\r\n"); wr.write("\r\n"); // Envia cabeçalho wr.flush(); // Obtém a resposta BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line; while ((line = rd.readLine()) != null) { System.out.println(line + "\n"); } wr.close(); rd.close(); socket.close();} catch (UnknownHostException e) {...} catch (IOException e) {...}

Page 21: HTTP

Conexão a servidores web Conexão a servidores web em Javaem Java

• Na linguagem Java há classes que tornam estas conexões mais abstratas

• Por exemplo, a classe java.net.UrlConnection• Observe que a manipulação de parâmetros de

requisição deve ser feita manualmente com sockets

• A classe UrlConnection possui métodos específicos para a manipulação de parâmetros de requisição, por exemplo:– getLastModified(): retorna a data da última

modificação– setRequestProperty(key, value): define um parâmetro

de requisição

Page 22: HTTP

Conexão a servidores web Conexão a servidores web em Java - UrlConnectionem Java - UrlConnection

URL url;try {

url = new URL("http://www.siriusnet.com.br"); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream(); int c; while ((c = in.read()) != -1) System.out.print((char)c); } catch (MalformedURLException e) {} catch (IOException e) {}

Page 23: HTTP

WebCrawlerWebCrawler

• Com as classes vistas, temos ferramentas suficientes para criarmos um robô para varrer a web

• Por exemplo, poderíamos buscar na web onde ocorrem as palavras “Sirius Sistemas Digitais”

• Para tal, deveríamos buscar uma página inicial e, à partir desta, buscar recursivamente os links existentes nela

Page 24: HTTP

WebCrawler – Algoritmo WebCrawler – Algoritmo GeralGeral

Obtém do usuário o que se deseja buscar e a url inicialAdicione a url à lista de urls a serem pesquisadasEnquanto a lista de urls a serem pesquisadas não for vazia, faça:

Obtenha a primeira url da listaMova a url para uma lista de urls já pesquisadasConfirme que o protocolo da url é http; caso contrário, volte ao início do EnquantoTente abrir a url (recuperar o documento do servidor web)Percorra o documento procurando por outros links

Localize alguma referência (href de uma tag <a/>)Verifique se é algum documento texto (html, txt, xml, etc ..); caso

contrário, busque outroSe o link não estiver presente na lista de urls a serem

pesquisadas, nem na de já pesquisadas, adicione à lista das urls a serem pesquisadasProcesse o documento (por exemplo, percorra procurando por alguma informação desejada – pode ser feito em combinaçao com o item anterior)

Exiba resultado da busca

Page 25: HTTP

““Código de Ética” para Código de Ética” para acesso a servidores webacesso a servidores web

• Conexões a servidores são custosas e podem prejudicar o desempenho destes

• Estas conexões indevidas acontecem com freqüência com os robôs

• Existe um padrão para a exclusão de robôs: http://www.robotstxt.org/

• Basicamente, você precisa criar um arquivo texto e deixá-lo publicamente disponível no seu servidor web configurado para exclusão dos robôs

Page 26: HTTP

““Código de Ética” para Código de Ética” para acesso a servidores webacesso a servidores web

• A validade deste código depende do bom senso dos implementadores de robôs

Page 27: HTTP

ReferênciasReferências

• http://www.w3schools.com/– Site com tutoriais on-line rápidos e com muita

qualidade• http://del.icio.us/carlosbazilio/java

– Meus favoritos sobre o assunto• http://www.w3.org/

– Site do consórcio W3C• http://java.sun.com/developer/technicalArticles/

ThirdParty/WebCrawler/– Artigo que apresenta a implementação de um

webcrawler utilizando um applet como interface