Você está na página 1de 21

Programação para Internet I

2. O protocolo HTTP

Nuno Miguel Gil Fonseca


nuno.fonseca@estgoh.ipc.pt
Protocolos
 Conjunto de regras que define o modo como
aplicações informáticas comunicam entre si.
 Permite que diferentes sistemas sejam
desenvolvidos independentemente uns dos
outros, no entanto, posteriormente podem
comunicar entre si

(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

GET /index.html HTTP/1.1 GET /index.ht HTTP/1.1


Host: www.google.com 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 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

HTTP/1.1 200 OK HTTP/1.1 404 Not Found


Date: Tue, 21 Mar 2006 18:55:15 GMT Date: Tue, 21 Mar 2006 18:58:24 GMT

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD


HTML 4.01 Transitional//EN">
<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

Host: www.google.com ‰PNG



¼J!§ §
¡K¡JIZ7ð�y ¡ÞÞÞ·Þ>sëЄ
çûœRª’O h6›ŽaøB4
Ê  [ è� /œ> 4܉‘Ñë÷
÷Þ¸ÿ¶ÛbÝ)�‘...

(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