Patrocínio Natura

Ajax: Requisições HEAD

9 de maio de 2009

É nóis di novo, apresentando mais um daqueles recursos que você vai achar extremamente interessante, mas não vai achar uso nenhum para ele. Falo das requisições to tipo HEAD em Ajax. Elas tem utilidade sim, mas você vai ter que por a cabeça pra pensar pra conseguir achar alguma.

O que é uma requisição HEAD?

Em uma requisição do tipo HEAD, oição do tipo HEAD, o servidor apenas retorna as linhas de cabeçaletorna as linhas de cabeçalho (os headers) de um arquivo qualquer. Isso quer dizer que podemos descobso quer dizer que podemos descobrir o Content-Type, ou Last-Modified de um arquivo sem precisar receber todo ele.

Qual é a utilidade disso tudo? Não muita, concordo. Mas pense. Temos um arquivo extremamente grande para ser retornado. Devemos atualizar ele a um certo tempo, mas não precisamos disso se sua última modificação foi antes da primeira requisição. Fazemos uma requisição HEAD, descobrimos isso, e retornamos tudo aquilo apenas se precisarmos. Redundante, pouco prático, mas ainda assim é útil.

Fazendo a tal requisição

Para fazermos a “tal requisição”, precisamos de um objeto XMLHttpRequest já setado. Mas antes de colocar a mão na massa, veja o que pode ser o cabeçalho de um arquivo:

HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Cache-Control: max-age=172800
Expires: Sat, 06 Apr 2002 11:34:01 GMT
Date: Thu, 04 Apr 2002 11:34:01 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Thu, 14 Mar 2002 12:06:30 GMT
ETag: "0a7ccac50cbc11:1aad"
Content-Length: 52282

Veja bem: você conhece (e talvez usou, em Ajax mesmo) alguns desses headers. Até creio que seja possível retorna-los mesmo em uma requisição GET ou POST, mas não vem ao caso.

Para retornarmos um header individual, utilizamos o método getResponseHeader(strName), e para retornarmos todos os headers podemos usar getAllResponseHeaders(). Um exemplo mais prático:

// Eis o mistério resolvido
xmlhttp.open("HEAD", "http://qualquer.lugar.com", false);
// Usei uma requisição síncrona, pra não precisar tratar dos readyStates
xmlhttp.send("");
alert(xmlhttp.getAllResponseHeaders());

Facinho, não? Eu disse, o difícil é achar utilidade, mas se você tem uma mente engenhosa ou estilo dominador-global-ou-genérico-maluco, você vai achar…

Julio Greff – Programador e Desenvolvedor de Web

Compatilhe esse artigo!

Nenhum Comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.