Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP

8,115 views

Published on

Published in: Education
  • Be the first to comment

Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP

  1. 1. Cabeçalhos do protocolo HTTP<br />2011-2012<br />Metodologias de Programação IV<br />
  2. 2. Mensagem dopedido HTTP<br />(Porto 80 de TCP)<br />Cliente HTTP<br />(por ex.,o navegador)<br />Servidor HTTP(Apache, IIS, etc.)<br />Mensagem daresposta HTTP<br />
  3. 3. Mensagens do HTTP<br />Pedido<br />Linha de pedido CRLF<br />Linhas de cabeçalhos CRLF<br />CRLF<br />Corpo<br />Resposta<br />Linha de estado CRLF<br />Linhas de cabeçalhos CRLF<br />CRLF<br />Corpo<br />
  4. 4. Pedido HTTP<br />GET /tc/home.html HTTP/1.1<br />Host: www.tribunalconstitucional.pt<br />...<br />
  5. 5. Resposta HTTP<br />HTTP/1.1 200 OK<br />Content-Type: text/html<br />Content-Length: 9934<br />...<br />
  6. 6.
  7. 7.
  8. 8.
  9. 9. Lista total de cabeçalhos:<br />Vamos ver alguns exemplos<br />HypertextTransferProtocol -- HTTP/1.1<br />http://www.w3.org/Protocols/rfc2616/rfc2616.html<br />
  10. 10. GET /tc/home.html HTTP/1.1<br />Host: www.tribunalconstitucional.pt<br />Date: Tue, 30 Sep 2008 13:45:29 GMT<br />User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3<br />Referer: http://home.utad.pt/~leonelm/teste.htm<br />If-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT<br />
  11. 11. GET /tc/home.html HTTP/1.1<br />Host: www.tribunalconstitucional.pt<br />Date: Tue, 30 Sep 2008 13:45:29 GMT<br />User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3<br />Referer: http://home.utad.pt/~leonelm/teste.htm<br />If-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT<br />
  12. 12. GET /tc/home.html HTTP/1.1<br />Host: www.tribunalconstitucional.pt<br />Date: Tue, 30 Sep 2008 13:45:29 GMT<br />User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3<br />Referer: http://home.utad.pt/~leonelm/teste.htm<br />If-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT<br />
  13. 13. GET /tc/home.html HTTP/1.1<br />Host: www.tribunalconstitucional.pt<br />Date: Tue, 30 Sep 2008 13:45:29 GMT<br />User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3<br />Referer: http://home.utad.pt/~leonelm/teste.htm<br />If-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT<br />
  14. 14. GET /tc/home.html HTTP/1.1<br />Host: www.tribunalconstitucional.pt<br />Date: Tue, 30 Sep 2008 13:45:29 GMT<br />User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3<br />Referer: http://home.utad.pt/~leonelm/teste.htm<br />If-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT<br />
  15. 15. HTTP/1.1 200 OK<br />Server: Microsoft-IIS/4.0<br />Date: Tue, 30 Sep 2008 13:45:38 GMT<br />Content-Type: text/html<br />Accept-Ranges: bytes<br />Last-Modified: Wed, 06 Jan 1999 18:56:06 GMT<br />Content-Length: 9934<br />
  16. 16. HTTP/1.1 200 OK<br />Server: Microsoft-IIS/4.0<br />Date: Tue, 30 Sep 2008 13:45:38 GMT<br />Content-Type: text/html<br />Accept-Ranges: bytes<br />Last-Modified: Wed, 06 Jan 1999 18:56:06 GMT<br />Content-Length: 9934<br />
  17. 17. HTTP/1.1 200 OK<br />Server: Microsoft-IIS/4.0<br />Date: Tue, 30 Sep 2008 13:45:38 GMT<br />Content-Type: text/html<br />Accept-Ranges: bytes<br />Last-Modified: Wed, 06 Jan 1999 18:56:06 GMT<br />Content-Length: 9934<br />
  18. 18. HTTP/1.1 200 OK<br />Server: Microsoft-IIS/4.0<br />Date: Tue, 30 Sep 2008 13:45:38 GMT<br />Content-Type: text/html<br />Accept-Ranges: bytes<br />Last-Modified: Wed, 06 Jan 1999 18:56:06 GMT<br />Content-Length: 9934<br />
  19. 19. HTTP/1.1 200 OK<br />Server: Microsoft-IIS/4.0<br />Date: Tue, 30 Sep 2008 13:45:38 GMT<br />Content-Type: text/html<br />Accept-Ranges: bytes<br />Last-Modified: Wed, 06 Jan 1999 18:56:06 GMT<br />Content-Length: 9934<br />
  20. 20. HTTP/1.1 200 OK<br />Server: Microsoft-IIS/4.0<br />Date: Tue, 30 Sep 2008 13:45:38 GMT<br />Content-Type: text/html<br />Accept-Ranges: bytes<br />Last-Modified: Wed, 06 Jan 1999 18:56:06 GMT<br />Content-Length: 9934<br />
  21. 21. Quem define (mete) os cabeçalhos dos pedidos?<br />Quem define (mete) os cabeçalhos das respostas de conteúdo estático?<br />Quem define (mete) os cabeçalhos das respostas de conteúdo dinâmico?<br />
  22. 22. function ajax(url, vars, callbackFunction) {<br /> var request = new XMLHttpRequest();<br /> request.open("POST", url, true);<br /> request.setRequestHeader(<br /> "Content-Type",<br /> "application/x-www-form-urlencoded");<br /> request.onreadystatechange = function() {<br /> if (request.readyState == 4 &&<br /> request.status == 200) {<br /> if (request.responseText) {<br /> callbackFunction(request.responseText);<br /> }<br /> }<br /> };<br /> request.send(vars);<br />}<br />No navegador (pedido)<br />
  23. 23. function ajax(url, vars, callbackFunction) {<br /> var request = new XMLHttpRequest();<br /> request.open("POST", url, true);<br /> request.setRequestHeader(<br /> "Content-Type",<br /> "application/x-www-form-urlencoded");<br /> request.onreadystatechange = function() {<br /> if (request.readyState == 4 &&<br /> request.status == 200) {<br /> if (request.responseText) {<br /> callbackFunction(request.responseText);<br /> }<br /> }<br /> };<br /> request.send(vars);<br />}<br />No browser (pedido)<br />
  24. 24. <% Response.AddHeader "CustomHeader", "CustomValue" %><br /><HTML><br /><TITLE>Teste</TITLE><br /><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alho<br />HTTP personalizado</p><br /></BODY><br /></HTML><br />No servidor (resposta)<br />
  25. 25. <% Response.AddHeader "CustomHeader", "CustomValue" %><br /><HTML><br /><TITLE>Teste</TITLE><br /><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alho<br />HTTP personalizado</p><br /></BODY><br /></HTML><br />No servidor (resposta)<br />
  26. 26. <HTML><br /><TITLE>Teste</TITLE><br /><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alho<br />HTTP personalizado</p><br /><% Response.AddHeader "CustomHeader", "CustomValue" %><br /></BODY><br /></HTML><br />Isto pode funcionar?<br />
  27. 27. Navegador pede a página<br />Servidor cria a resposta, excepto corpo<br />Servidor vai lendo o ficheiro da página<br />Servidor copia o conteúdo do ficheiro para o corpo<br /><% %><br />?<br />Não<br />Sim<br />Servidor vai enviando o corpo da página<br />Servidor executa o código e cria mais corpo<br />
  28. 28. Quando chega ao código, já se acabaram os cabeçalhos e já começou a ser enviado o corpo da resposta...<br /><HTML><br /><TITLE>Teste</TITLE><br /><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alho<br />HTTP personalizado</p><br /><% Response.AddHeader "CustomHeader", "CustomValue" %><br /></BODY><br /></HTML><br />
  29. 29. Mas há servidores que implementam buffering da resposta:<br />Browser pede a página<br />Servidor vai criando a resposta em memória intermédia (buffer)<br />Servidor cria a resposta, excepto corpo<br />Servidor vai lendo o ficheiro da página<br />Servidor copia o conteúdo do ficheiro para o corpo<br /><% %><br />?<br />Não<br />Sim<br />Servidor executa o código e cria mais corpo<br />
  30. 30. Mas há servidores que implementam buffering da resposta:<br />Browser pede a página<br />Servidor vai criando a resposta em memória intermédia (buffer) até chegar ao fim do corpo<br />Servidor cria a resposta, excepto corpo<br />Servidor vai lendo o ficheiro da página<br />Servidor copia o conteúdo do ficheiro para o corpo<br /><% %><br />?<br />Não<br />Sim<br />Servidor executa o código e cria mais corpo<br />Servidor envia o conteúdo do buffer<br /><% Response.Flush() %><br />
  31. 31. Com buffering activo no servidor (default no IIS 5.0 e mais recentes), isto funciona<br /><HTML><br /><TITLE>Teste</TITLE><br /><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alho<br />HTTP personalizado</p><br /><% Response.AddHeader "CustomHeader", "CustomValue" %><br /></BODY><br /></HTML><br />
  32. 32. Leituras associadas<br />Web ApplicationArchitecture, Second Edition<br />Cap. 3: “Birth of theWeb: HTTP”, págs. 44 a 60.<br />HypertextTransferProtocol -- HTTP/1.1<br />http://www.w3.org/Protocols/rfc2616/rfc2616.html<br />
  33. 33. Tipos mime no protocolo http<br />Próxima secção<br />

×