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

8,047 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
8,047
On SlideShare
0
From Embeds
0
Number of Embeds
7,031
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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 />

×