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

Post on 19-Jun-2015

7.786 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Cabeçalhos do protocolo HTTP

2011-2012

Metodologias de Programação IV

Cliente HTTP(por ex.,

o navegador)

Servidor HTTP(Apache, IIS,

etc.)

Mensagem dopedido HTTP

(Porto 80 de TCP)

Mensagem daresposta HTTP

Mensagens do HTTP

PedidoLinha de pedido CRLFLinhas de cabeçalhos CRLFCRLFCorpo

RespostaLinha de estado CRLFLinhas de cabeçalhos CRLFCRLFCorpo

Pedido HTTP

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

Resposta HTTP

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

Lista total de cabeçalhos:

Vamos ver alguns exemplos

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

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

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

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

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

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

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

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

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

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

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

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

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?

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)

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)

<% 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)

<% 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)

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

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

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

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:

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() %>

<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

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

TIPOS MIME NO PROTOCOLO HTTPPróxima secção

top related