1 / 27

HTTP

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?. <body> <form action=“processaForm.jsp" > Nome: <input type="text" name="firstname"><br />

Télécharger la présentation

HTTP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Arquitetura

  3. HTML – Como funciona o 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

  4. Tipos 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

  5. Tipos 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

  6. Tipos de requisições HTTPPouco 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

  7. Exemplos de Requisição HTTP GET / HTTP/1.1 Host: www.siriusnet.com.br Connection: close User-agent: Mozilla/4.0 Accept-language: fr GET http://www.siriusnet.com.br/comochegar.html HTTP/1.1 GET / HTTP/1.1

  8. Como testar uma requisição HTTP • Uma forma simples é abrindo uma conexão com o servidor web desejado: Configura o prompt local para que os comandos sejam exibidos • C:\...> telnet<Enter> • telnet> set localecho<Enter> • telnet> open www.siriusnet.com.br 80 <Enter> • get / HTTP/1.1<Enter> • <Enter> Servidor a ser conectado Porta no servidor; 80 é a porta padrão http Cabeçalho http

  9. Formato de Requisição HTTP <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

  10. Alguns campos de cabeç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

  11. Exemplo de Resposta HTTP HTTP/1.0 200 OK Date: Wed, 21 Jan 2009 13:00:53 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET Content-Length: 342 Content-Type: text/html Set-Cookie: ASPSESSIONIDSSTTAADC=LNDHNMIDCHPLLEOPNAMFFGLE; path=/ Cache-Control: private X-Cache: MISS from CACHE-04 Via: 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>

  12. Formato de Resposta HTTP <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

  13. Códigos e Mensagens de Status • 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

  14. Alguns campos de cabeç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

  15. Lista de Campos de Cabeç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

  16. Cookies • 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

  17. Cookies • 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

  18. Conexão a servidores web em 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?

  19. Conexão a servidores web em 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

  20. Conexão a servidores web em 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) {...}

  21. Conexão a servidores web em 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

  22. Conexão a servidores web em 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) { }

  23. WebCrawler • 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

  24. WebCrawler – Algoritmo Geral Obtém do usuário o que se deseja buscar e a url inicial Adicione a url à lista de urls a serem pesquisadas Enquanto a lista de urls a serem pesquisadas não for vazia, faça: Obtenha a primeira url da lista Mova a url para uma lista de urls já pesquisadas Confirme que o protocolo da url é http; caso contrário, volte ao início do Enquanto Tente 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 outro Se o link não estiver presente na lista de urls a serem pesquisadas, nem na de já pesquisadas, adicione à lista das urls a serem pesquisadas Processe 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

  25. “Código de Ética” para acesso 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

  26. “Código de Ética” para acesso a servidores web • A validade deste código depende do bom senso dos implementadores de robôs

  27. Referê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

More Related