2. O protocolo HTTP
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 2
O protocolo HTTP
Hypertext Transfer Protocol
Actualmente na versão 1.1
É o protocolo de rede usado para “encaminhar” a
maior parte dos ficheiros (e outros tipos de
informação) que circulam pela World Wide Web.
Entre os ficheiros transmitidos encontram-se
principalmente ficheiros HTML, imagens, etc.
O protocolo HTTP opera geralmente sobre
sockets TCP/IP.
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 3
O protocolo HTTP
Como muitos outros protocolos de rede, assenta
no modelo cliente-servidor
Como exemplo de um “cliente”, temos os
browsers (Internet Explorer, por exemplo)
A parte “servidora” fica a cargo dos HTTP
servers (Apache, por exemplo)
Um servidor de HTTP está, regra geral, “à
escuta” no porto 80, no entanto, outros portos
podem ser usados
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 4
O protocolo HTTP
A estrutura das transacções
Como acontece geralmente em aplicações cliente
servidor, o cliente efectua um pedido (request) e
posteriormente o servidor enviará a resposta
(response).
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 5
O protocolo HTTP
A estrutura das transacções
O formato das mensagens de request e response têm
uma estrutura semelhante:
Uma linha inicial (diferente entre request e response) (1)
Um ou mais cabeçalhos (2)
Uma linha em branco (3)
Um corpo de mensagem (opcional) (um ficheiro, dados de
input/output)(4)
1 HTTP/1.1 200 OK
Date: Tue, 21 Mar 2006 18:55:15 GMT
obrigatório
2 Server: Apache/1.3.33 (Unix)
Last-Modified: Thu, 12 May 2005 13:43:54 GMT
Content-Type: text/html
3
<!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.01 Transitional//EN"> opcional
4 <html>
...
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 6
O protocolo HTTP
A estrutura das transações (cont.)
Os pedidos
A linha inicial de um pedido (request) é constituído por três
partes separadas por um espaço:
O nome de um método (GET, POST, HEAD)
O path local do que se pretende transmitir
A versão do protocolo HTTP que se está a usar
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 7
O protocolo HTTP
A estrutura das transações (cont.)
As respostas
A linha inicial (status line) de uma resposta (response) é
igualmente constituído por três partes separadas por um espaço:
A versão do protocolo HTTP que está a ser usado
Um determinado código de resposta (response status code)
Uma frase que identifique o resultado
<... Código html da página pedida ...> <... Código html da página de erro ...>
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 8
O protocolo HTTP
A estrutura das transações (cont.)
As respostas
Ficheiro HTML
HTTP/1.1 200 OK
Date: Tue, 21 Mar 2006 18:55:15 GMT
GET /index.html HTTP/1.1 Server: Apache/1.3.33 (Unix)
Last-Modified: Thu, 12 May 2005 13:43:54 GMT
Host: www.google.com Content-Type: text/html
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 9
O protocolo HTTP
A estrutura das transações (cont.)
As respostas
Ficheiro binário (PNG neste caso)
HTTP/1.1 200 OK
Date: Tue, 21 Mar 2006 19:22:18 GMT
Server: Apache/1.3.33 (Unix)
Accept-Ranges: bytes
Content-Length: 2642
GET /logo.png HTTP/1.1 Content-Type: image/png
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 10
O protocolo HTTP
A estrutura das transações (cont.)
As respostas (cont.)
Response status codes
Classes
1xx – mensagens informativas
2xx – indicam sucesso na execução da tarefa
3xx – redireccionar o cliente para outro URL
4xx – indicam um erro na parte do cliente
5xx – indicam um erro na parte dos servidor
Os mais usuais
200 OK
404 Not Found
500 Server Error
Lista completa
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 11
O protocolo HTTP
A estrutura das transações (cont.)
Cabeçalhos (headers)
Contêm informação sobre o request ou sobre a response, ou
sobre o objecto a ser enviado no corpo da mensagem
Deverá ser escrito um header por linha
A estrutura básica de um header é:
Nome-do-header: valor
Na versão 1.0 do protocolo estão definidos 16 cabeçalhos
diferentes, não sendo nenhum deles obrigatório
Na versão 1.1 estão definidos 46 cabeçalhos diferentes, sendo
que apenas o cabeçalho “Host:” é obrigatório (mas apenas nos
requests)
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 12
O protocolo HTTP
A estrutura das transações (cont.)
Cabeçalhos (headers) (cont.)
Por uma questão de cortesia, é comum incluir nos pedidos:
“From:” – geralmente o endereço de email de quem faz o pedido
From: nuno@gilito.com
“User-Agent:” - Identifica o programa que faz o request
User-Agent: Mozilla/3.0Gold
Já nas respostas, é usual incluir:
“Server:” – Identifica o web server que está a responder
Server: Apache/1.2b3-dev
“Last-Modified:” – A data da ultima alteração do recurso que se pretende
aceder
Last-Modified: Fri, 31 Dec 1999 23:59:59 GMT
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 13
O protocolo HTTP
A estrutura das transações (cont.)
Cabeçalhos (headers) (cont.)
Alguns dos headers mais utilizados
Accept-Language: permite especificar as linguagem em que
preferencialmente se pretende obter a response.
Accept-Language: pt, es, it
Cache-Control: permite especificar o modo como os mecanismos de caching
se deverão comportar.
Cache-Control: no-cache
Content-Encoding: permite identificar que tipos especiais de codificação
foram aplicados sobre os dados transmitidos
Content-Encoding: gzip
Content-Language: permite especificar a linguagem do texto que segue no
corpo da mensagem
Content-language: pt
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 14
O protocolo HTTP
A estrutura das transações (cont.)
Cabeçalhos (headers) (cont.)
Alguns dos headers mais utilizados (cont.)
Content-Location: Poderá ser usado em situações em que se pretenda
redireccionar o utilizador para um URI diferente do que foi especificado.
Content-Location: http://www.xpto.pt/abc.htm
Date: representa a data em que a mensagem foi gerada
Date: Tue, 15 Nov 1994 08:12:31 GMT
Expires: especifica a data a partir da qual uma response poderá ser
considerada expirada
Expires: Thu, 01 Dec 1994 16:00:00 GMT
From: representa geralmente o endereço de email do utilizador que acede a
determinada página
From: nuno.fonseca@estgoh.ipc.pt
Host: o endereço da máquina a que se pretende aceder
Host: www.estgoh.ipc.pt
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 15
O protocolo HTTP
A estrutura das transações (cont.)
Cabeçalhos (headers) (cont.)
Alguns dos headers mais utilizados (cont.)
Last-Modified: Indica a data em que ocorreu a última modificação ao recurso
que se pretende aceder
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Referer: Indica o endereço da página a partir da qual foi feito o pedido actual
Referer: http://www.xpto.pt/index.html
Server: Indica informação sobre o software que “responde” como servidor
Server: CERN/3.0 libwww/2.17
User-Agent: fornece informação sobre a aplicação (geralmente um browser)
que está a aceder a determinado recurso.
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 16
O protocolo HTTP
A estrutura das transações (cont.)
Cabeçalhos (headers) (cont.)
Em http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
poderá encontrar a lista completa dos cabeçalhos do protocolo
HTTP 1.1
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 17
O protocolo HTTP
A estrutura das transações (cont.)
Corpo da mensagem
Por vezes é enviada uma mensagem a seguir aos cabeçalhos
Nos request este corpo de mensagem é usado aquando da
submissão de informação (uso de formulários, por exemplo)
Já no caso dos response é usado acima de tudo para
“transportar” os dados do servidor para o cliente (HTML,
imagens, etc.)
Geralmente quando uma mensagem inclui corpo de mensagem, é
usual incluir cabeçalhos que descrevam o corpo da mensagem em
questão:
Content-Type: o MIME-type do conteúdo (text/html, image/gif , etc.)
Content-Length: o número em bytes do corpo da mensagem
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 18
O protocolo HTTP
A estrutura das transações (cont.)
Outros métodos
HEAD
É semelhante ao GET, no entanto, é apenas usado para obter o valor dos
cabeçalhos.
Não deverá existir nunca corpo de mensagem no pedido
A resposta também não irá conter corpo de mensagem, apenas cabeçalhos
Utilizado principalmente pelos mecanismos de caching
HEAD / HTTP/1.1
Host: www.google.com
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 19
O protocolo HTTP
A estrutura das transações (cont.)
Outros métodos
POST
Usado em situações em que é necessário enviar informação do cliente para o
servidor
Um request POST é diferente de um request GET nomeadamente no que diz
respeito a:
É sempre usado o corpo da mensagem
O header Content-Type tem geralmente o valor application/x-www-form-
urlencoded
POST /path/script.cgi HTTP/1.1
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
home=Cosby&favorite+flavor=flies
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 20
O protocolo HTTP
Para “falar” directamente com um web server, basta
fazer
telnet www.omeuservidor.com 80
… e posteriormente enviar os pedidos HTTP pretendidos
(c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Programação para Internet I 21