Title: 4. Protocolo http 1.1
14. Protocolo http 1.1
- Gestión de Sistemas en Internet
- Universidad Antonio de Nebrija, 2003/04
- Justo N. Hidalgo Sanz
2Contenidos
- Introducción
- HTTP1.0
- HTTP1.1
- Anexo
- Cabeceras HTTP 1.1
- Utilización de Telnet
3Introducción
- Protocolo de nivel de aplicación para sistemas de
información hipermedia, colaborativos y
distribuidos. - Genérico, sin estado.
- Desde 1990 (Tim Berners-Lee).
- RFC 2616 (2068 obsoleto).
4Características básicas
- Conjunto abierto de métodos y cabeceras que
indiquen el propósito de la petición, a partir de
un URI, que se refiere a un URL u URN, y que
indica el recurso sobre el cual un método puede
ser aplicado. - Mensajes en formato MIME.
- URI Uniform Resource Identifier.
- URL Uniform Resource Location.
- URN Uniform Resource Name.
- MIME Multipurpose Internet Mail Exchange).
5Terminología
- Conexión
- Mensaje
- Petición
- Respuesta
- Recurso
- Entidad
- Negociación de contenido
- User Agent
- Proxy
- Gateway
- Cachè
- Age
- Stale
6Operativa
- HTTP es un protocolo de petición/respuesta
- Cliente envío de una petición al servidor.
- Servidor devuelve una respuesta.
- Entre media pueden existir intermediarios.
- HTTP utiliza TCP/IP
- Puerto 80 por defecto.
- HTTP 1.0 nueva conexión para cada intercambio.
- HTTP 1.1 NO!
7Sintaxis (I)
- Gramática completa en la RFC.
- http_URLhttp // host port abs_path
? query - Los mensajes enviados consisten de
- Una línea inicial.
- Cero o más líneas de cabecera.
- Una línea en blanco (i.e. CRLF).
- Un cuerpo de mensaje opcional (un fichero, datos
de consulta, resultado, ...) - No existe límite existe el 414 (request URI too
long)
8Sintaxis (II) línea inicial de petición
- Tres partes separadas por espacios
- Nombre del método.
- Path local del recurso pedido (parte de la URL
tras el hostnamerequest URI). - Versión del protocolo HTTP utilizado.
9Sintaxis (III) línea inicial de respuesta
- Tres partes, separadas por espacios
- Versión http.
- Código de respuesta de estados.
- 1xx mensaje de información.
- 2xx éxito de algún tipo.
- 3xx redirección a alguna otra URL.
- 4xx error en la parte cliente.
- 5xx error en la parte servidora.
- Reason phrase en inglés. Describe el código de
estado.
10Sintaxis (IV) códigos
- 200 OK La petición fue exitosa, y el recurso
resultado se devuelve en el cuerpo del mensaje. - 404 Not Found El recurso pedido no existe.
- 301 Moved Permanently
- 302 Moved Temporarily
- 303 See Other (HTTP 1.1 only) El recurso se ha
llevado a otra URL (dada por la cabecera de
respuesta Location), y debería de ser obtenido
por el cliente automáticamente. - 500 Server Error Error de servidor inesperado.
Script que falla, sintaxis erronea, no se puede
ejecutar, etc.
11Sintaxis (V) línea de cabecera
- Una por cabecera, del tipo
- Header-Name value, terminado en CRLF.
- HTTP 1.0 16 cabeceras opcionales.
- HTTP 1.1 46 cabeceras, donde
- Peticiones
- Host es obligatoria en las peticiones
- From y UserAgent son recomendables.
- Respuestas
- Server
- Last-modified.
12Sintaxis (y VI) cuerpo del mensaje
- Si un mensaje http incluye un cuerpo
- Content-Type tipo MIME.
- Content-Length bytes del cuerpo.
13Métodos (I)
- Ya hemos visto el GET.
- HEAD como GET, pero sólo se piden las cabeceras
de respuesta, no el recurso real. - POST
- Se envían datos al servidor para su posterior
tratamiento (p.e. CGI).
14Métodos (y II)
- Diferencias entre GET y POST
- El POST envía info en la petición.
- El request URI no suele ser un recurso a obtener,
sino un programa que maneja info que se le está
enviando. - La respuesta suele ser la salida de un programa,
no un fichero estático. - Resulta que el GET también se usa para eso.
- Hay más DELETE, TRACE, OPTIONS.
15Proxies
- La única diferencia con respecto a la invocación
a un servidor normal es que la primera línea
incluye la URL completa del servidor destino, en
vez de sólo el path, para que el proxy sepa a
quién ha de enviarlo (esto para proxies no
transparentes).
16Problemas de HTTP 1.0
- Proxies jerárquicos.
- Caching.
- Necesidad de conexiones persistentes.
- Hosts virtuales.
- Demasiados http 1.0-compliant.
17Clientes HTTP 1.1 (I)
- Requisitos
- Incluir la cabecera Host en cada petición.
- Aceptar respuestas con datos chunked.
- Una de dos
- Soportar conexiones persistentes.
- Incluir la cabecera Connectionclose en cada
petición. - Manejar la respuesta 100 Continue.
18Clientes HTTP 1.1 (II) Cabecera Host
- Una IP puede ser multihomed
- www.host1.com
- www.host2.com
- Muy necesario, debido a la proliferación de web
sites.
19Clientes HTTP 1.1 (III) Chunked transfer encoding
- Envío de respuestas antes de conocer su longitud
total. - Cuerpo chunk
- Serie de pedazos. Cada chunk
- Línea con el tamaño en hexadecimal ltinfogt
CRLF - Datos más CRLF.
- Seguido de una línea con 0s.
- Footers (opcionales).
- Línea en blanco.
20Clientes HTTP 1.1 (IV) Persistencia
- La apertura y cierre de conexiones TCP/IP son muy
costosas. - Pipelining de peticiones, recibiendo las
respuestas. - Si no se admite Connectionclose en todas las
peticiones, o si se sabe que es la última.
21Clientes HTTP 1.1 (y V) 100 Continue
- Útil para conexiones lentas, o procesamientos muy
cargados. - El cliente, generalmente, lo único que tiene que
hacer es ignorarlo (pero quizá actualizando sus
contadores de timeout).
22Servidores HTTP 1.1 (I)
- Requisitos
- Cabecera Host
- URLs absolutas.
- Chunked transfer-encoding.
- Conexiones persistentes o Connectionclose.
- Respuesta 100 Continue.
- Cabecera Date
- Cabeceras If-Modified-Since y
If-Unmodified-Since - Métodos GET, HEAD
- Peticiones HTTP 1.0
23Servidores HTTP 1.1 (II) Cabecera Host
- Los servidores no pueden aceptar peticiones http
1.1 sin esta cabecera
24Servidores HTTP 1.1 (III)URLs absolutas
- En futuras versiones HTTP las peticiones
utilizarán URLs absolutas. - Para permitir la transición, http 1.1 ha de
aceptarlo, aunque los clientes no tienen por qué
enviarlo así.
25Servidores HTTP 1.1 (IV)Chunked Transfer-encoding
- Deben poder ACEPTARLOS (no muy corriente).
- Están obligados a poder enviarlos.
26Servidores HTTP 1.1 (V) Persistencia
- El servidor puede cortar una conexión ociosa
(p.e. 10 s.). - Si el servidor no quiere soportar persistencia,
Connectionclose en su respuesta.
27Servidores HTTP 1.1 (VI)100 Continue
28Servidores HTTP 1.1 (VII)Cabecera Date
- Los servidores deben marcar (timestamp) toda
respuesta (menos la 100 Continue) con esta
cabecera. - GMT (Greenwich Mean Time).
29Servidores HTTP 1.1 (VIII)If-Modified-Since,
If-Unmodified-Since
- Envíame este recurso sólo si no ha cambiado
desde. - No es obligatorio para clientes, sí para
servidores. - Si, sin la cabecera, el resultado fuera erroneo
(200), se debe ignorar esa cabecera, y enviar el
código de error. - If-Modified-Since
- Utilizado con GET.
- Si se ha modificado, se envía el recurso.
- Si no se ha modificado 304 Not modified.
- If-Unmodified-Since
- Cualquier método.
- Si se ha modificado 412 Precondition failed.
30Servidores HTTP 1.1 (IX)Métodos
- GET y HEAD han de estar implementados.
- POST suele estarlo.
- Si algún otro no lo está 501 Not Implemented.
31Servidores HTTP 1.1 (y X)Peticiones HTTP 1.0
32Anexo elementos de cabeceras
33Cabeceras de Petición (I)
- Gramática
- Request Request-Line
- (( general-header
- request-header
- entity-header ) CRLF)
- CRLF
- message-body
34Cabeceras de Petición (II). Métodos
- Línea de petición
- Request-Line Method SP Request-URI SP
HTTP-Version CRLF - Métodos OPTIONS, GET, HEAD, POST, PUT, DELETE,
TRACE, CONNECT
35Cabeceras de Petición (III). Request URI
- Request-URI "" absoluteURI abs_path
authority - la petición es sobre el propio servidor
- OPTIONS HTTP/1.1
- absoluteURI obligatorio cuando se accede a un
proxy. - GET http//www.w3.org/pub/WWW/TheProject.html
HTTP/1.1
36Cabeceras de Petición (IV). Campos de cabecera
- ACCEPT tipos aceptables como respuesta del
servidor web (en formato MIME). - Accept-Charset.
- ACCEPT-ENCODING métodos de codificación
soportados por el browser - Accept-Encoding compress, gzip
- Accept-Encoding
- Accept-Encoding
- Accept-Encoding compressq0.5, gzipq1.0
- Accept-Encoding gzipq1.0, identity q0.5,
q0
37Cabeceras de Petición (V). Campos de cabecera
- ACCEPT-LANGUAGE
- AUTHORIZATION credenciales con la información de
autentificación del user agent. - Expect comportamiento del servidor esperado por
el usuario. - FROM e-mail.
- Host host y puerto
- If-Match
- IF-MODIFIED-SINCE
- If-Modified-Since Sat, 29 Oct 1994 194331 GMT
38Cabeceras de Petición (y VI). Campos de cabecera
- If-None-Match
- If-Range
- IF-UNMODIFIED-SINCE
- Max-Forwards para TRACE y OPTIONS
- Proxy-Authorization
- Range
- REFERER importante URI del recurso de donde se
obtuvo este Request-URI (es decir URI del
documento donde el usuario cliqueó. - TE
- USER-AGENT browser
- Mozilla/4.01 en (Win95 I).
39Cabeceras de Respuesta (I)
- Gramática
- Request Status-Line
- (( general-header
- response-header
- entity-header ) CRLF)
- CRLF
- message-body
40Cabeceras de Respuesta (II). Línea de Estado
- Línea de estado
- 1xx informacional, se continúa el proceso
- 100 Continue
- 101 Switching protocols
41Cabeceras de Respuesta (III) . Línea de Estado
- 2xx recepción exitosa
- 200 OK
- 201 Created
- 202 Accepted
- 203 Non-Authoritative Information
- 204 No Content
- 205 Reset Content
- 206 Partial Content
42Cabeceras de Respuesta (IV) . Línea de Estado
- 3xx es necesaria alguna acción más
- 300 Multiple Choices
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 305 Use Proxy
- 307 Temporary Redirect
43Cabeceras de Respuesta (V) . Línea de Estado
- 4xx Error en cliente
- 400 - Bad Request
- 401 - Unauthorized
- 402 - Payment Required
- 403 - Forbidden
- 404 - Not Found
- 405 - Method Not Allowed
- 406 - Not Acceptable
- 407 - Proxy Authentication Required
- 408 - Request Time-out
- 409 - Conflict
- 410 - Gone
- 411 - Length Required
- 412 - Precondition Failed
- 413 - Request Entity Too Large
- 414 - Request-URI Too Large
- 415 - Unsupported Media Type
- 416 - Requested range not satisfiable
- 417 - Expectation Failed
44Cabeceras de Respuesta (VI) . Línea de Estado
- 5xx Error en Servidor
- 500 Internal Server Error
- 501 Not Implemented
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Time-out
- 505 HTTP Version not supported
45Cabeceras de Respuesta (VII) . Campos de cabecera
- Accept-Ranges
- Age
- Etag
- Location para redirección.
- Proxy-Authenticate
- Retry-After
- Server sw utilizado por servidor para manejar la
petición. - Vary
- WWW-Authenticate
46Cabeceras de Respuesta (VIII) . Cabeceras de
Entidad
- ALLOW métodos permitidos por el servidor.
- CONTENT-ENCODING codificación del documento
retornado - Content-Encoding gzip
- CONTENT-LANGUAGE
- CONTENT-LENGTH número decimal de octetos
(bytes). - CONTENT-LOCATION
- Content-MD5
47Cabeceras de Respuesta (y IX) . Cabeceras de
Entidad
- CONTENT-TYPE de qué tipo MIME es el documento
- Content-Type text/html charsetISO-8859-4
- CONTENT-RANGE
- DATE
- EXPIRES
- LAST-MODIFIED
48Acceso Telnet
- telnet www.host.com
- GET /path/file.html HTTP/1.0
- cabeceras, si necesarias
- línea en blanco
49Bibliografía
- RFC 2616
- RFC 2068 (obsoleto)
- RFC 1945 (más obsoleto todavía)