metodologias de programação iv - aula 3, secção 1 - cabeçalhos do protocolo http

33
Cabeçalhos do protocolo HTTP 2011-2012 Metodologias de Programação IV

Upload: leonel-morgado

Post on 19-Jun-2015

7.786 views

Category:

Education


0 download

TRANSCRIPT

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

Cabeçalhos do protocolo HTTP

2011-2012

Metodologias de Programação IV

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

Cliente HTTP(por ex.,

o navegador)

Servidor HTTP(Apache, IIS,

etc.)

Mensagem dopedido HTTP

(Porto 80 de TCP)

Mensagem daresposta HTTP

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

Mensagens do HTTP

PedidoLinha de pedido CRLFLinhas de cabeçalhos CRLFCRLFCorpo

RespostaLinha de estado CRLFLinhas de cabeçalhos CRLFCRLFCorpo

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

Pedido HTTP

GET /tc/home.html HTTP/1.1Host: www.tribunalconstitucional.pt...

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

Resposta HTTP

HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 9934...

Page 6: Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Page 7: Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Page 8: Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Page 9: Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP

Lista total de cabeçalhos:

Vamos ver alguns exemplos

Hypertext Transfer Protocol -- HTTP/1.1http://www.w3.org/Protocols/rfc2616/rfc2616.html

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

GET /tc/home.html HTTP/1.1Host: www.tribunalconstitucional.ptDate: Tue, 30 Sep 2008 13:45:29 GMTUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3Referer: http://home.utad.pt/~leonelm/teste.htmIf-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT

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

GET /tc/home.html HTTP/1.1Host: www.tribunalconstitucional.ptDate: Tue, 30 Sep 2008 13:45:29 GMTUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3Referer: http://home.utad.pt/~leonelm/teste.htmIf-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT

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

GET /tc/home.html HTTP/1.1Host: www.tribunalconstitucional.ptDate: Tue, 30 Sep 2008 13:45:29 GMTUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3Referer: http://home.utad.pt/~leonelm/teste.htmIf-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT

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

GET /tc/home.html HTTP/1.1Host: www.tribunalconstitucional.ptDate: Tue, 30 Sep 2008 13:45:29 GMTUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3Referer: http://home.utad.pt/~leonelm/teste.htmIf-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT

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

GET /tc/home.html HTTP/1.1Host: www.tribunalconstitucional.ptDate: Tue, 30 Sep 2008 13:45:29 GMTUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3Referer: http://home.utad.pt/~leonelm/teste.htmIf-Modified-Since: Tue, 30 Sep 2008 13:40:29 GMT

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

HTTP/1.1 200 OKServer: Microsoft-IIS/4.0Date: Tue, 30 Sep 2008 13:45:38 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Wed, 06 Jan 1999 18:56:06 GMTContent-Length: 9934

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

HTTP/1.1 200 OKServer: Microsoft-IIS/4.0Date: Tue, 30 Sep 2008 13:45:38 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Wed, 06 Jan 1999 18:56:06 GMTContent-Length: 9934

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

HTTP/1.1 200 OKServer: Microsoft-IIS/4.0Date: Tue, 30 Sep 2008 13:45:38 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Wed, 06 Jan 1999 18:56:06 GMTContent-Length: 9934

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

HTTP/1.1 200 OKServer: Microsoft-IIS/4.0Date: Tue, 30 Sep 2008 13:45:38 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Wed, 06 Jan 1999 18:56:06 GMTContent-Length: 9934

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

HTTP/1.1 200 OKServer: Microsoft-IIS/4.0Date: Tue, 30 Sep 2008 13:45:38 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Wed, 06 Jan 1999 18:56:06 GMTContent-Length: 9934

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

HTTP/1.1 200 OKServer: Microsoft-IIS/4.0Date: Tue, 30 Sep 2008 13:45:38 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Wed, 06 Jan 1999 18:56:06 GMTContent-Length: 9934

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

Quem define (mete) os cabeçalhos dos pedidos?

Quem define (mete) os cabeçalhos das respostas de conteúdo dinâmico?

Quem define (mete) os cabeçalhos das respostas de conteúdo estático?

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

function ajax(url, vars, callbackFunction) { var request = new XMLHttpRequest(); request.open("POST", url, true); request.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded"); request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { if (request.responseText) { callbackFunction(request.responseText); } } }; request.send(vars);}

No navegador (pedido)

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

function ajax(url, vars, callbackFunction) { var request = new XMLHttpRequest(); request.open("POST", url, true); request.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded"); request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { if (request.responseText) { callbackFunction(request.responseText); } } }; request.send(vars);}

No browser (pedido)

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

<% Response.AddHeader "CustomHeader", "CustomValue" %><HTML><TITLE>Teste</TITLE><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alhoHTTP personalizado</p></BODY></HTML>

No servidor (resposta)

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

<% Response.AddHeader "CustomHeader", "CustomValue" %><HTML><TITLE>Teste</TITLE><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alhoHTTP personalizado</p></BODY></HTML>

No servidor (resposta)

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

<HTML><TITLE>Teste</TITLE><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alhoHTTP personalizado</p><% Response.AddHeader "CustomHeader", "CustomValue" %></BODY></HTML>

Isto pode funcionar?

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

Navegador pede a página

Servidor cria a resposta, excepto corpo

Servidor vai lendo o ficheiro da página

<% %>?

Servidor copia o conteúdo do

ficheiro para o corpo

Servidor executa o código e cria mais corpo

Sim

Não

Servidor vai enviando o

corpo da página

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

<HTML><TITLE>Teste</TITLE><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alhoHTTP personalizado</p><% Response.AddHeader "CustomHeader", "CustomValue" %></BODY></HTML>

Quando chega ao código, já se acabaram os cabeçalhos e já começou

a ser enviado o corpo da resposta...

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

Browser pede a página

Servidor cria a resposta, excepto

corpo

Servidor vai lendo o ficheiro da

página

<% %>?

Servidor copia o conteúdo do

ficheiro para o corpo

Servidor executa o código e cria mais

corpo

Sim

Não

Servidor vai criando a resposta em memória

intermédia (buffer)

Mas há servidores que implementam buffering da resposta:

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

Mas há servidores que implementam buffering da resposta:

Browser pede a página

Servidor cria a resposta, excepto

corpo

Servidor vai lendo o ficheiro da

página

<% %>?

Servidor copia o conteúdo do

ficheiro para o corpo

Servidor executa o código e cria mais

corpo

Sim

Não

Servidor vai criando a resposta em memória

intermédia (buffer) até chegar ao fim do corpo

Servidor envia o conteúdo do

buffer <% Response.Flush() %>

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

<HTML><TITLE>Teste</TITLE><BODY><p>Esta p&aacute;gina tem um cabe&ccedil;alhoHTTP personalizado</p><% Response.AddHeader "CustomHeader", "CustomValue" %></BODY></HTML>

Com buffering activo no servidor (default no IIS 5.0 e mais recentes),

isto funciona

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

Leituras associadas

Web Application Architecture, Second EditionCap. 3: “Birth of theWeb: HTTP”, págs. 44 a 60.

Hypertext Transfer Protocol -- HTTP/1.1http://www.w3.org/Protocols/rfc2616/rfc2616.html

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

TIPOS MIME NO PROTOCOLO HTTPPróxima secção