Protocolo HTTP
Caractersticas
- Modelo Requisio/Resposta
- Common Gateway Interface (CGI)
-
Caractersticas
Hypertext Transfer Protocol (HTTP)
Protocolo utilizado para transferir documentos de
hipertexto e seus recursos de mquinas remotas.
Caractersticas gerais
Protocolo da camada de aplicao;
Funciona baseado na troca de requisioresposta;
Cabealho das mensagens texto puro (no
binrio);
No orientado a conexes;
No guarda estado entre conexes distintas, isto
, cada conexo nova para o servidor.
Caractersticas
Exemplo ([Link]
Abre conexo TCP-IP na porta 80
com servidor
GET / [Link] HTTP / 1.0
Browser
HTTP/1.0 200 Ok <html>...</html>
Conexo TCP-IP
Fecha conexo TCP-IP
[Link]
Servidor
Web
Requisio HTTP
Sintaxe geral de uma requisio HTTP (RFC822):
comando /uri-recurso HTTP/verso
{cabealho: valor}n
<linha em branco>
dados
A primeira linha chamada linha de comando
Podem haver vrios cabealhos de requisio
Alguns comandos HTTP: GET, POST, HEAD,
PUT, DELETE, outros
Requisio HTTP
Comando GET
Solicita ao servidor um recurso (pgina HTML, figura
GIF, documento do word, etc.)
A URI do recurso pode conter dados separados por '?
Exemplo: /[Link]?dado1=valor1&dado2=valor2
Comando POST
Usado para enviar dados para o servidor (p.e., upload
de arquivo, dados de formulrio HTML)
Ao contrrio do GET, os dados seguem aps a linha
em branco que separa cabealhos dos dados
Requisio HTTP
Exemplo ([Link]
[Link]
Browser
GET /[Link] HTTP/1.0
accept:text/html
user-agent: IE/6.0
if-modified-since: Sat, 24-01
cookie: user=joao
Servidor
Web
URIs e URLs
URI = URL + URN
URI = Identificador Uniforme de Recursos
URL = Localizador Uniforme de Recursos
URN = Nome Uniforme de Recurso
Sintaxe geral de uma URL:
<protocolo>://<servidor>:<porta>/<caminho>/<recurso>
A porta opcional para servios em portas default
Caminho e recurso podem ser omitidos (URLs
parciais)
URLs podem conter dados depois do nome do recurso
URIs e URLs
Exemplos de URLs:
[Link]
[Link]
[Link]
[Link]
=superior&curso=334
Formato x-www-form-urlencoded
Formato para transferncia de dados no HTTP
Usado para codificar os dados produzidos pelo
cliente
Sintaxe
No pode haver nenhum espao em branco nos dados
Dados so agrupados em pares nome=valor
Pares so separados por &
Espaos em branco so codificados com +
Caracteres de 8 bits so codificados com %HH, onde
HH o cdigo hexadecimal do caractere
Requisio HTTP
Exemplo ([Link]
[Link]
POST /cgi-bin/login HTTP/1.0
accept:text/html
user-agent: IE/6.0
if-modified-since: Sat, 24-01
Browser
user=maria&senha=123abc
Servidor
Web
Resposta HTTP
Sintaxe geral de uma resposta HTTP (RFC-822):
HTTP/verso cdigo mensagem
{cabealho: valor}n
<linha em branco>
dados
A primeira linha chamada linha de status
Podem haver vrios cabealhos de resposta
Os dados podem ser texto (pgina HTML) ou
binrio (figura GIF)
Resposta HTTP
Exemplo ([Link]
[Link]
HTTP/1.0 200 Ok
date: Sat, 24 Jan 2004 23:58:
content-type: text/html
set-cookie: user=fred
Browser
<html><head><title>Al</title
<body>
<h1>Bem vindo minha homepa
Servidor
Web
Resposta HTTP
Toda resposta HTTP deve ter um cabealho
content-type
Ele indica o tipo MIME do recurso enviado
Protocolo HTTP multimdia
Cdigos de status da resposta:
1xx: Mensagem de informao
2xx: Sucesso no atendimento requisio
3xx: Redirecionamento para outro servidor/recurso
4xx: Erro no atendimento ao cliente
5xx: Erro do servidor Web
Resposta HTTP
inum = 11
qtty = 1
fname = Maria
lname = Joao
minit = C. G.
addr = Av Argemiro de Figueiredo, 985
cc = Visa
ccn = 1234567
ccn = 1234567
Resposta HTTP (Exemplo)
POST /cgi-bin/grava HTTP/1.0
accept:text/html
user-agent: IE/6.0
content-type:application/x-www
Browser
inum=11&qtty=1&price=300&fna
me=Maria&lname=Joao&minit=C
%C3+G%C3&addr=Av+Argemiro
+Figueiredo,+985&cc=visa&ccn=
1234567&ccn=1234567
[Link]
Servidor
Web
Resposta HTTP
<form method="POST"
action="[Link]
Item Number: <input type="text"
name="inum"><br>
Quantity: <input type="text"
name="qtty"><br>
... <! outros elementos-->
POST /cgi-bin/grava
HTTP/1.0
<input type="submit"
value="Submit
Order">
accept:text/html
</form>
user-agent: IE/6.0
content-type:application/x-www
inum=11&qtty=1&price=300&fname=Maria&lname=Joao&
minit=C%C3+G%C3&addr=Av+Argemiro
+Figueiredo,+985&cc=visa&ccn=1234567&ccn=1234567
Common Gateway Interface
O servidor web no apenas um servidor de
arquivos
possvel solicitar ao servidor web a execuo
de programas
CGI uma especificao que diz como estes
programas devem ser implementados para
poderem ser executados pelo servidor web
Como recebem os dados enviados pelo cliente?
Como devem gerar a resposta?
Como acessam informaes passadas pelo
servidor?
Common Gateway Interface
Aplicaes
Gerao de documentos com contedo dinmico
Produzir resultados em sites de busca
Gravar dados em arquivos ou SGBDs no servidor
Forma
O programa executa no lado do servidor
Pode ser escrito em qualquer linguagem de
programao
Cada requisio pelo programa cria um novo
processo idntico na memria (ineficiente)
Common Gateway Interface
POST /cgi-bin/grava HTTP/1.0
accept:text/html
user-agent: IE/6.0
content-type:application/x-www
Browser
inum=11&qtty=1&price=300&fna
me=Maria&lname=Joao&minit=C
%C3+G%C3&addr=Av+Argemiro
+Figueiredo,+985&cc=visa&ccn=
1234567&ccn=1234567
Script grava
[Link]
Servidor
Web
Passando dados com POST
inum=11&qtty=1&price=300&fna
me=Maria&lname=Joao&minit=C
%C3+G%C3&addr=Av+Argemiro
+Figueiredo,+985&cc=visa&ccn=
1234567&ccn=1234567
Servidor
Web
Grava
Passando dados com GET
Servidor
Web
Grava
QUERY_STRING
inum=11&qtty=1&price=300&fna
me=Maria&lname=Joao&minit=C
%C3+G%C3&addr=Av+Argemiro
+Figueiredo,+985&cc=visa&ccn=
1234567&ccn=1234567