Vous êtes sur la page 1sur 10

Qu es HTTP?

HTTP significa Hypertext Transfer Protocol.

HyperText Transfer Protocol

Es el protocolo de red que se utiliza para transferir los


archivos (llamados recursos) que forman parte de la
World Wide Web. Ya sean estos archivos HTML,
imgenes, sonidos, etc...

Ing. Carlos A. Barcenilla

c.a.barcenilla@ieee.org

Normalmente HTTP utiliza a TCP como medio de


transporte.

Basado en HTTP Made Really Easy

http://www.jmarshall.com/easy/http/
1

Qu son los Recursos?

Estructura de las Transacciones HTTP

HTTP se utiliza para transferir Recursos, no solo archivos.

HTTP utiliza el modelo cliente/servidor.

Un recurso es un trozo de informacin que puede


identificarse a travs de un URL.

Un cliente HTTP abre una conexin hacia un servidor


HTTP y enva un mensaje de peticin (request message),
luego el servidor enva un mensaje de respuesta
(response message) el cual contiene el recurso que se
solicitado.

La clase ms comn de recursos son los archivos, pero


tambin pueden ser datos generados dinmicamente.

Luego de enviar la respuesta el servidor cierra la


conexin.
Por ende el protocolo no mantiene estado (stateless)
entre las distintas transacciones de un mismo cliente.

Mensajes HTTP

Mensajes HTTP

Los mensajes HTTP pueden ser:

Resumiendo el formato de un mensaje HTTP es:

Solicitudes
Respuestas

<lnea inicial, distinta para solicitudes y respuestas>

Tanto las solicitudes como las respuestas utilizan el


formato genrico de e-mails (RFC-822)

Encabezado1: valor1
Encabezado2: valor2

Ambos tipos de mensajes consisten de

<ms encabezados>

Una lnea inicial


Cero o ms encabezados (headers)

Encabezado N: valor N

Una lnea en blanco

<lnea en blanco>

Un cuerpo del mensaje (opcional, ej. archivo, datos de una


consulta).

<cuerpo de mensaje opcional, contenidos de un archivo,


de una consulta, datos binarios, etc>
5

Mensajes HTTP: Lnea inicial (Solicitud)

Mensajes HTTP: Lnea inicial (Respuesta)

La lnea inicial de una solicitud tiene tres partes separadas


entre s por un espacio.

La lnea inicial de una respuesta (llamada lnea de estado)


tiene tres partes separadas entre s por un espacio.
Versin de HTTP
Cdigo de estado
Frase explicativa (legible por humanos)

El mtodo (GET, PUT, POST, OPTIONS, TRACE, DELETE,...)


El identificador del recurso (URI).
La versin del protocolo HTTP en uso.

Ejemplos:

Ejemplos:

GET /directorio1/directorio2/index.html HTTP/1.0

HTTP/1.0 200 OK
HTTP/1.0 404 Not Found

GET / HTTP/1.1
7

Mensajes HTTP: Cdigos de estado

Lneas de encabezado

El cdigo de estado es un entero de 3 dgitos.

Estas lneas proveen informacin acerca de la solicitud o


respuesta.

1xx: Informativos
2xx: xito
3xx: Redireccin
4xx: Error de cliente
5xx: Error de servidor

Cada lnea de encabezado consiste de un nombre de


campo seguido por un carcter dos puntos : y el valor
para ese campo.
El orden de los campos no es importante.

Los ms comunes:
200 OK

Ejemplos:

Solicitud exitosa, la respuesta se enva en el cuerpo.

404 Not Found

User-Agent: Mozilla/6.0

303 See Other

From: juan@perez.com

500 Server Error

Content-Type: text/html

El recurso no existe.
El recurso se ha movido a otra URL (Dada en el header Location)
Error no esperado en el servidor.

Lneas de encabezado

10

Cuerpo del mensaje

HTTP 1.0 define 16 headers (ninguno es obligatorio).


HTTP 1.1 define 46 headers (solo Host: es obligatorio).

Luego de las lneas de encabezado un mensaje HTTP


puede contener un cuerpo (body).

En las solicitudes suelen incluirse los siguientes:

En las respuestas el cuerpo es la seccin en donde se


enva el recurso solicitado.
En las solicitudes el cuerpo se utiliza para subir datos que
ingres el usuario o para transferir archivos hacia el
servidor.

User-Agent: (Identifica al software del cliente y la versin).


From: (La direccin de e-mail de quien enva la solicitud).

En las respuestas algunos encabezados comunes son:


Server: (anlogo a User-Agent:, ej. Server: Apache/1.3.14).
Last-Modified: (fecha de ltima modificacin del recurso, se utiliza
para mantener actualizados los cachs, ej. Last-Modified: Fri, 31
Jan 2000 12:12:12 GMT)

11

Las lneas de encabezado ms comunes que definen el


cuerpo son:
Content-Type: (Da el tipo MIME de los datos del cuerpo, ejemplo:
text/html image/gif).
Content-Lenght: (Especifica el nmero de bytes en el cuerpo).
12

Ejemplo de sesin HTTP

El mtodo HEAD

El cliente desea obtener


http://www.ieee.org/numero/uno.html

Una solicitud con el mtodo HEAD es similar al


GET con la diferencia que en este caso la
respuesta solo contiene los encabezados y no el
cuerpo.

El cliente establece una conexin TCP al puerto 80 de


www.ieee.org y enva la solicitud con el mtodo GET.
GET /numero/uno.html HTTP/1.0
User-Agent: MiBrowser/2.0
[lnea en blanco]

Es til para verificar las caractersticas de un


recurso sin necesidad de transferirlo.

El server responde por la misma conexin con:


HTTP/1.0 200 OK
Date: Sat, 18 Nov 2000 15:18:02 GMT
Content-Type: text/html
Content-Lenght: 52
[lnea en blanco]
<html><body>
<h1>Mi Archivo HTML</h1>
</body></html>

Las respuestas a mtodos HEAD nunca contienen


cuerpo.

13

El mtodo POST

14

El mtodo POST (Ejemplo)

Una solicitud POST se utiliza para enviar datos al


servidor (por ejemplo para enviar un formulario).
El mtodo POST se diferencia del GET pues
Hay un bloque de datos que se enva con la solicitud
(en el cuerpo de la misma).
Hay normalmente headers que describen el cuerpo que
se enva (ej. Content-Type y Content-Lenght).
El URI que se solicita no es un recurso sino
normalmente un script al que se le envan los datos.
La respuesta HTTP normalmente es generada
dinmicamente.

El mtodo POST se usa comunmente para enviar un


formulario HTML a un script que se ejecuta en el servidor.
En este caso Content-Type toma el valor
application/x-www-form-urlencoded y Content-Lenght
indica su longitud.
Ejemplo (enviar las variables nombre=Juan y
Apellido=Perez):
POST /directorio/script.cgi HTTP/1.0
User-Agent: TuBrowser/1.7
Content-Type: application/x-www-form-urlencoded
Content-Length: 26
nombre=Juan&Apellido=Perez

15

16

HTTP 1.1

HTTP 1.1: Clientes

HTTP 1.1 fue definido para atacar nuevas necesidades y


solucionar problemas de HTTP 1.0. Las mejoras incluyen:

Para cumplir con HTTP 1.1 los clientes deben:

Respuesta ms veloz (permite que en una sola


conexin se realicen varias transacciones
solicitud/respuesta).

Incluir el encabezado Host: en cada solicitud.

Ahorro de ancho de banda a travs del uso de cach.

Aceptar respuestas en modo chunk.

Respuesta ms rpida para pginas generadas


automticamente, permite que una respuesta se enve
an cuando no se sepa su longitud total (chunked
response).

Soportar conexiones persistentes o incluir el


encabezado Connection: close en cada solicitud.
Ser capaces de manejar la respuesta 100 Continue.

Uso eficiente de las direcciones IP (permite servidores


virtuales basados en nombres).
17

HTTP 1.1: Encabezado Host

18

HTTP 1.1: Chunked Transfer-Encoding

A partir de HTTP 1.1 un server en una direccin IP puede


manejar mltiples sitios webs virtuales.
Para que ello sea posible cada solicitud debe incluir el
encabezado Host.

Si un servidor desea comenzar a enviar la respuesta antes


de conocer su longitud total puede hacerlo incluyendo el
encabezado Transfer-Encoding: chunked.
El cuerpo de un mensaje con esta codificacin contiene
una serie de trozos (chunks) seguidos con una lnea con
un 0 (cero), seguido de una serie de footers (iguales a
los headers).

Ejemplo:
GET /directorio/archivo.html HTTP/1.1
Host: www.sitio.com

Cada trozo contiene dos partes:

[lnea en blanco]

Una lnea con el tamao de ese trozo (en hexadecimal).

Host es el nico encabezado obligatorio en una solicitud


HTTP 1.1.
19

Los datos en si mismos (al final se agrega CRLF).

20

HTTP 1.1: Chunked Transfer-Encoding

HTTP 1.1: Chunked Transfer-Encoding

Ejemplo:

El ejemplo anterior equivale a:

HTTP/1.1 200 OK
Date: Sat, 18 Nov 2000 13:29:14 GMT
Content-Type: text/plain
Transfer-Encoding: chunked

HTTP/1.1 200 OK
Date: Sat, 18 Nov 2000 13:29:14 GMT
Content-Type: text/plain
Content-Length: 45
Footer1: valor1
Footer2: valor2

1b; ignorar lo que va luego del punto y coma


Este es un ejemplo de trans
12
ferencia en trozos
0
Footer1: valor1
Footer2: valor2
[lnea en blanco]

Este es un ejemplo de transferencia en trozos

21

HTTP 1.1: Conexiones Persistentes

22

HTTP 1.1: El encabezado Date

En HTTP 1.1 las conexiones son persistentes por


defecto, esto significa que luego de una
transaccin el servidor no cierra la conexin sino
que espera otra solicitud.

Para implementar cachs HTTP es necesario


registrar las fechas y horas de
creacin/modificacin de los recursos
(timestamps).

El cliente puede incluir el encabezado


Connection: close en una solicitud para indicar
que se luego de enviar la respuesta el servidor
debe cerrar la conexin.

Para ello se incluye el encabezado Date. Los


servers deben incluir la fecha y hora actual
utilizando este encabezado.

Un cliente que no soporta conexiones


persistentes debe incluir siempre el encabezado
Connection: close.

Ejemplo:

23

Date: Sun, 19 Nov 2000 19:39:22 GMT


24

HTTP 1.1: If-(un)modified-since

Ejemplo

Para ahorrar ancho de banda, HTTP 1.1 define los


encabezados If-Modified-Since y If-Unmodified-Since.
If-Modified-Since
Indica que solo se debe enviar el recurso solicitado si ha
cambiado luego de la fecha especificada. Se utiliza con el mtodo
GET. Si no ha cambiado el servidor responde con 304 Not
Modified.
Ejemplo: If-Modified-Since: Sun, 12 Dec 1999 21:59:59 GMT

If-Unmodified-Since
Indica que solo se debe enviar el recurso solicitado si ste no ha
cambiado luego de la fecha especificada. Puede usarse con
cualquier mtodo. Si el recurso ha cambiado el servidor responde
con 412 Precondition Failed.
Ejemplo: If-Unmodified-Since: Sun, 12 Dec 1999 21:59:59 GMT

GET /Xasx/tnt/private.htm HTTP/1.1


Accept: */*
Accept-Language: es-ar
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Host: ultimateanarchy.com
Connection: Keep-Alive
HTTP/1.1 200 OK
Date: Sat, 18 Nov 2000 20:41:27 GMT
Server: Apache/1.3.12 (Unix) mod_bwlimited/0.5 PHP/4.0.2 mod_perl/1.24
mod_log_bytes/0.2 mod_frontpage/3.0.4.3 mod_ssl/2.6.6 OpenSSL/0.9.5a
Last-Modified: Sat, 18 Nov 2000 16:36:33 GMT
ETag: "22ff8-53e-3a16b011"
Accept-Ranges: bytes
Content-Length: 1342
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
<form method=post action="http://www.ezgreen.com/_cgi/subscriber.cgi">
.........................................................................................................................
</form>

25

Ejemplo

26

Ejemplo

GET /estilos/estilos.css HTTP/1.1


Accept: */*
Referer: http://www.datosenlaweb.com/
Accept-Language: es-ar
Accept-Encoding: gzip, deflate
If-Modified-Since: Mon, 25 Sep 2000 19:49:47 GMT
If-None-Match: "8f010-5ba-39cfac5b"
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Host: www.datosenlaweb.com
Connection: Keep-Alive
Cookie: PHPSESSID=1191dab4f547c4a02a85143a4c918fd6

GET /images/partners/datosbanner.gif HTTP/1.1


Accept: */*
Referer: http://www.datosenlaweb.com/
Accept-Language: es-ar
Accept-Encoding: gzip, deflate
If-Modified-Since: Wed, 27 Sep 2000 15:37:30 GMT
If-None-Match: "09992d89828c01:a14"
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Host: www.decidir.com.ar
Connection: Keep-Alive
Cookie: datosusuario=SITIO=1

HTTP/1.1 304 Not Modified


Date: Sat, 18 Nov 2000 19:42:20 GMT
Server: Apache/1.3.12 Ben-SSL/1.40 (Unix) PHP/3.0.15
Connection: Keep-Alive
Keep-Alive: timeout=15, max=100
ETag: "8f010-5ba-39cfac5b"

HTTP/1.1 304 Not Modified


Server: Microsoft-IIS/4.0
Date: Sat, 18 Nov 2000 20:39:54 GMT
ETag: "09992d89828c01:9ed8"
Content-Length: 0

27

28

Ejemplo

Ejemplo

GET /server/ad/DatosenelWeb/ROS/974579848720? HTTP/1.1


Accept: */*
Referer:
http://ads.clickexperts.net/hserver/SITE=DEW/AREA=TEI.NOT.UNIV.PROE/D
EW=HOME/LANG=ES/EI=3/ES=4/POS=T/AAMSZ=FULL
Accept-Language: es-ar
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Host: ad-adex3.flycast.com
Connection: Keep-Alive
Cookie: atf=1_2521127420
HTTP/1.0 302 Moved Temporarily
Server: DWExtension
Location: http://crs.clickexperts.net/sites/dew/data54.gif
Ad-Reach: EngageMedia

GET / HTTP/1.1
Accept: application/vnd.ms-excel, application/msword, image/gif, image/x-xbitmap,
image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, */*
Accept-Language: es-ar
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Host: www.datosenlaweb.com
Connection: Keep-Alive
HTTP/1.1 200 OK
Date: Sat, 18 Nov 2000 19:42:18 GMT
Server: Apache/1.3.12 Ben-SSL/1.40 (Unix) PHP/3.0.15
X-Powered-By: PHP/3.0.15
Set-Cookie: PHPSESSID=1191dab4f547c4a02a85143a4c918fd6
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
ecd
<HTML><HEAD........................................................................................ </td>
ffb
<form .................</html>
0

29

30

Ejemplo

Ejemplo

HEAD / HTTP/1.0
HTTP/1.0 302 Found
Content-Length: 155
Connection: Close
Server: GWS/2.0
Content-Type: text/html
Date: Mon, 07 Oct 2002 14:04:01 GMT
Location: http://www.google.com.ar/
Set-Cookie:
PREF=ID=66e653d35b020a90:TM=1033999441:LM=1033999441:S=
bGZmIPqKlM23W25B; expires=Sun, 17-Jan-2038 19:14:07 GMT;
path=/; domain=.google.com

GET /docs/ HTTP/1.1


Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: es-ar
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: sg.rec.utn.edu.ar
Connection: Keep-Alive
HTTP/1.1 302 Found
Date: Mon, 07 Oct 2002 14:26:49 GMT
Server: Apache/1.3.23 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2
mod_perl/1.26
X-Powered-By: PHP/4.1.2
Location: php/buscador.php3
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
0

31

32

Ejemplo (Request)

Ejemplo (Response)

GET /docs/php/buscador.php3 HTTP/1.1


Accept: image/gif, image/x-xbitmap, image/jpeg, application/msword,
*/*
Accept-Language: es-ar
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: sg.rec.utn.edu.ar
Connection: Keep-Alive

HTTP/1.1 200 OK
Date: Mon, 07 Oct 2002 14:26:49 GMT
Server: Apache/1.3.23 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b
DAV/1.0.3 PHP/4.1.2 mod_perl/1.26
X-Powered-By: PHP/4.1.2
Set-Cookie: PHPSESSID=35bf915272e201ec63e2adfbbd9322f4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
e0b
<html><head>.. ..</
19a
table><hr size="1">.</
19
center></body></html>
0

33

Ejemplo

34

Ejemplo (Request)

GET /docs/images/logohpgif.gif HTTP/1.1


Accept: */*
Referer: http://sg.rec.utn.edu.ar/docs/php/buscador.php3
Accept-Language: es-ar
Accept-Encoding: gzip, deflate

GET /docs/php/login.php3?PHPSESSID=35bf915272e201ec63e2adfbbd9322f4
HTTP/1.1

If-Modified-Since: Tue, 18 Jun 2002 20:21:04 GMT


If-None-Match: "7e5a-a5d-3d0f9630"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: sg.rec.utn.edu.ar
Connection: Keep-Alive
Cookie: PHPSESSID=35bf915272e201ec63e2adfbbd9322f4

Referer: http://sg.rec.utn.edu.ar/docs/php/buscador.php3

HTTP/1.1 304 Not Modified


Date: Mon, 07 Oct 2002 14:26:51 GMT
Server: Apache/1.3.23 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b DAV/1.0.3
PHP/4.1.2 mod_perl/1.26
Connection: close
ETag: "7e5a-a5d-3d0f9630"

Connection: Keep-Alive

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,


application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, */*
Accept-Language: es-ar
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: sg.rec.utn.edu.ar

35

Cookie: PHPSESSID=35bf915272e201ec63e2adfbbd9322f4

36

Ejemplo (Response)
HTTP/1.1 200 OK
Date: Mon, 07 Oct 2002 14:26:55 GMT
Server: Apache/1.3.23 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b
DAV/1.0.3 PHP/4.1.2 mod_perl/1.26
X-Powered-By: PHP/4.1.2
Pragma: no-cache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
921
<html><head></html>
0

37

Vous aimerez peut-être aussi