Protocolo HTTP 1.
1
Http (Protocolo de Transferencia de Hipertexto) se trata de un
protocolo de nivel de aplicación con la sencillez y velocidad necesaria
para sistemas de información hipertexto distribuidos que colaboran
entre sí.
• Se trata de un protocolo Cliente-Servidor orientado a
transacciones
• Proporciona seguridad utilizando el protocolo TCP
• Es un protocolo sin estados
o Cada transacción se trata independientemente
Terminología:
• Conexión: Es el enlace establecido entre un cliente y un
servidor para que puedan comunicarse entre sí. La conexión se
puede establecer y cerrar varias veces durante una sesión
• Mensaje: Es la unidad básica de intercambio de información
entre un cliente y un servidor HTTP. Se compone de una
cabecera (header) y, opcionalmente, un cuerpo (body).
• Solicitud: Es un mensaje enviado por un cliente HTTP a un
servidor, solicitando un recurso específico.
• Respuesta: Es un mensaje enviado por un servidor HTTP en
respuesta a una solicitud de un cliente. Una respuesta HTTP
incluye una versión del protocolo, un código de estado (status
code) y una cabecera (header) que contiene información
adicional, y opcionalmente, un cuerpo (body).
• Recurso: Es un objeto identificable por una URL que puede ser
solicitado por un cliente HTTP.
• Entidad: Es la información contenida en el cuerpo de una
solicitud o respuesta HTTP.
• Cliente: Es una aplicación o programa que envía solicitudes
HTTP a un servidor y procesa las respuestas recibidas.
• Agente de usuario: Es el software que actúa en nombre del
cliente, puede ser un navegador web, una aplicación móvil, etc.
• Servidor: Es una aplicación o programa que recibe solicitudes
HTTP de los clientes y envía respuestas.
• Servidor origen: Es el servidor que aloja el recurso solicitado
por el cliente.
• Proxy: Es un servidor intermediario que actúa como un
intermediario entre el cliente y el servidor origen. Puede
realizar funciones como caché, filtrado geográfico,
autenticación, entre otros.
• Gateway: Es un servidor intermediario que actúa como un
traductor entre diferentes protocolos. Por ejemplo, puede
traducir una solicitud HTTP a una solicitud FTP.
• Túnel: Es una conexión directa entre un cliente y un servidor a
través de una red intermedia, como un proxy o un firewall.
• Caché: Es un almacenamiento temporal de recursos solicitados
previamente, para que puedan ser servidos más rápidamente
en solicitudes futuras. Un servidor caché puede ser usado por
un proxy o por el navegador web del cliente.
Formas de Conexión HTTP
Existen dos formas principales de conexión HTTP:
- Conexión directa entre AU(Agente de Usuario) y Servidor:
Se conectan directamente a través de una red de
comunicaciones, como internet. La conexión se establece
mediante el envío de solicitudes de HTTP desde el AU (Agente
del Usuario) al servidor, y las respuestas correspondientes del
servidor al AU (Agente del Usuario) sin hacer uso de
intermediarios. Este tipo de conexiones son las más comunes
de HTTP.
- Conexión mediante sistemas intermedios:
En la conexión mediante sistemas intermedios, se utilizan
sistemas de red adicionales para facilitar la conexión entre el
AU (Agente del Usuario) y el servidor. Estos sistemas pueden
incluir Firewalls, servidores Proxy y balanceadores de carga. En
este caso, la conexión HTTP se realiza a través del sistema
intermedio, que se encarga de redirigir las solicitudes del AU
(Agente del Usuario) al servidor correspondiente, y de
transmitir las respuestas del servidor de vuelta al AU
La conexión mediante sistemas intermedios puede ser útil en
situaciones en las que se necesita una mayor seguridad o se
requiere mayor control sobre la conexión.
Tipos de Sistemas Intermedios
• Proxy: Un Proxy es servidor que actúa como intermediario
entre el cliente y el servidor original. El cliente envía una
solicitud al servidor proxy y este la reenvía al servidor original
en nombre del cliente. La respuesta del servidor original se
envía de vuelta al servidor proxy, que luego la reenvía al cliente.
• Gateway: Un Gateway es un servidor que actúa como
intermediario entre protocolos diferentes realizando la
traducción.
• Tunnel: Un túnel es un mecanismo para pasar datos a través de
una red privada o segura. Un túnel HTTP se crea utilizando un
servidor proxy y se utiliza para enviar tráfico HTTP a través de
una red segura, como una red privada virtual (VPD).
Cualquier entidad no intermedia que no esté usando un tunnel,
puede emplear una cache interna para manejar las solicitudes.
El protocolo HTTP es flexible en cuento a los formatos de datos a
tratar ya que se especifican utilizando el tipo de medios (Media
Type) también conocido como MIME. Por ejemplo, el tipo de medio
de una imagen podría ser "image/png".
Parámetros del protocolo
Versión
La versión http utiliza un esquema de enumeración de
<menor>.<mayor> donde el número mayor indica la versión principal
y el número menor indica la versión secundaria.
HTTP-Versión = HTTP/”Digit”.”Digit”
HTTP-Versión = HTTP/1.1
Identificadores de Recurso
Se pueden identificar de dos formas:
- Request URI
Se trata de una cadena que identifica el recurso solicitado en el
servidor. Request-URI puede ser "/[Link]".
- URL del HTTP
La URL se trata de una cadena de caracteres que indica la
ubicación de un recurso en la web y que se utiliza para acceder
a él.
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
http_URL = “Protolocolo” :// “Estación” : “Puerto” / “Camino”
Codificación del contenido
Content-Coding = gzip | compress | deflate | identity | token
Content-Coding es con el que se especifica en la cabecera de la
respuesta o la solicitud del mensaje HTTP el tipo de codificación que
se ha utilizado para comprimir del contenido del cuerpo.
Tipos de Mensajes
Para especificar el tipo de mensaje HTTP del que se trata una
“solicitud” o una “respuesta” se utiliza el siguiente encabezado:
HTTP-message = Request | Response
Cabeceras Generales
Las cabeceras generales son aquellas que se pueden usar tanto en
solicitudes como en respuestas.
- Cache-Control: Se utiliza para especificar las reglas de cache
que deben ser aplicadas a la respuesta o solicitud. Por ejemplo:
Que una respuesta se almacene en caché sólo por un período
de tiempo limitado o que no se almacene en caché en absoluto.
- Connection: Se utiliza para especificar las opciones de conexión
tras la transacción. Por ejemplo: El valor "close" indica que la
conexión debe ser cerrada después de la respuesta, mientras
que el valor "keep-alive" indica que la conexión debe ser
mantenida abierta para futuras solicitudes.
- Date: Se utiliza para indicar la fecha y hora en que se generó la
solicitud o respuesta.
- Pragma: Se utiliza para incluir información de control de caché.
Por ejemplo: El valor "no-cache" indica que la respuesta no
debe ser almacenada en caché. (IGUAL A Cache-Control).
- Trailer: Se utiliza para especificar las cabeceras que se incluirá
en el trailer (sección opcional que contiene cabeceras
adicionales y no se incluyeron en la cabecera original) de un
mensaje.
- Transfer-Encoding: Se utiliza para especificar el tipo de
codificación de transferencia que se ha utilizado en una
respuesta. El valor "chunked" indica que la respuesta ha sido
codificada en trozos.
- Upgrade: Se utiliza para indicar las opciones de actualización de
protocolo disponibles.
- Via: Se utiliza para incluir información sobre los servidores
intermediarios (Proxys) que han sido utilizados.
- Warning: Se utiliza para incluir información de advertencia en
una respuesta.
Cabeceras de Solicitudes
- Accept: Indica los tipos de MIME (datos) aceptados por el
cliente.
- Accept-Charset: Indica los conjuntos de caracteres aceptados
por el cliente.
- Accept-Encoding: Indica los algoritmos de compresión
aceptados por el cliente.
- Accept-Language: Indica los idiomas acetados por el cliente.
- Authorization: Contiene las credenciales de autenticación para
acceder al recurso solicitado.
- Expect: Indica que el cliente espera una respuesta concreta del
servidor antes de enviar la solicitud completa
- From: Indica la dirección de correo del usuario que realiza la
solicitud
- Host: Indica el nombre de dominio del servidor y el número de
puerto TCP en el que el servidor está escuchando para esta
solicitud.
- If-Match / If-Modified-Since / If-None-Match / If-Range / If-
Unmodified-Since: Utilizado para la validación de cache
condicional.
- Max-Forwards: Indica el número máximos de veces que la
solicitud puede ser reenviada.
- Proxy-Authorization: Contiene las credenciales de
autenticación para acceder al servidor proxy.
- Range: Indica la parte del recurso que se solicita
- Referer: Indica la URL de la página web anterior que solicitó el
recurso actual.
- TE: Indica los algoritmos de codificación de transferencia que
son aceptables en la respuesta
- User-Agent: Contiene información sobre el agente de usuario
que realiza la solicitud.
TIPOS DE SOLICITUDES QUE SE PUEDE REALIZAR
- OPTIONS: Para solicitar información sobre las opciones de
comunicación disponibles que se pueden realizar.
- GET: Para recuperar un recurso identificado por el URI.
- HEAD: Para recuperar la cabecera de un recurso.
- POST: Para enviar datos a un servidor.
- PUT: Para enviar una entidad para almacenarla en un servidor
en una ubicación especificada.
- PATCH: Para aplicar modificaciones parciales a un recurso
identificado con el URI
- DELETE: Para eliminar un recurso identificado por el URI
- TRACE: Para recuperar una copia de la solicitud tal como la
recibió el servidor
- CONNECT: Para establecer un túnel de comunicación
bidireccional entre el cliente y el servidor.
Cabeceras de Respuestas
- Accept-Ranges: Indica si el servidor soporta la solicitud de
rangos de bytes en las respuestas.
- Age: Indica la edad en segundos del recurso solicitado desde su
origen
- ETag: Proporciona una etiqueta que identifica la versión de la
representación del recurso en una respuesta.
- Location: Indica la URI a la que se ha accedido con éxito en
respuesta a la solicitud. Es utilizado en rediricciones. Indica la
URL del recurso al que se debe redirigir el cliente.
- Proxy-Authenticate: Indica que el servidor requiere
autenticación del cliente para acceder al recurso solicitado. El
cliente deberá enviar las credenciales adecuadas en una
solicitud posterior
- Retry-After: Indica cuánto tiempo debe esperar un cliente antes
de volver a intentar una solicitud fallida.
- Server: Proporciona información sobre el servidor que generó
la respuesta.
- Vary: Indica las cabeceras de solicitud que deben ser
consideradas por una caché intermedia.
- WWW-Authenticate: Utilizado para indicar que el servidor
requiere autenticación del del cliente para para acceder al
recurso solicitado. Se proporciona información sobre el
esquema de autenticación que se debe utilizar.
Cabeceras de Entidades
Se utilizan para describir la entidad que se envía en el mensaje HTTP.
- Allow: Indica los métodos HTTP permitidos para la entidad
identificada por el URI
- Content-Encoding: Indica el tipo de compresión que se ha
aplicado a la entidad.
- Content-Language: Indica el lenguaje natural o idioma de la
entidad.
- Content-Length: Indica el tamaño en bytes de la entidad que se
está enviando.
- Content-Location: Indica el URI que identifica de manera única
la entidad que se está enviando.
- Content-MD5: Proporciona un valor hash MD5 de la entidad
para verificar su integridad.
- Content-Range: Indica qué parte de la entidad se está enviando
en el mensaje.
- Content-Type: Indica el tipo de medio(dato) de la entidad que
se está enviando, usando el formato MIME.
- Expires: Indica el momento en que la entidad se considera
caducada y no debe ser considerada como actual.
- Last-Modified: Indica la fecha y hora en que se modificó por
última vez la entidad.