Internet

HTTP vs HTTPS

HTTP (Hypher Text Transfer Protocol) es el protocolo de la web. Funciona por encima de TCP, y éste a su vez, por encima de IP.

Las páginas web pueden usar tanto HTTP como HTTPS (Hyper Text Transfer Protocol Secure). ¿Cuáles son las diferencias entre ambos? ¿Por qué HTTP no es seguro?

Seguridad

Cuando solicitas una página HTTP de un servidor, los datos pasan por muchas redes, cada una de ellas controlada por un operador diferente.

Desde el router WiFi hasta el último nodo de la red, todos pueden ver el request y el response, y sin ninguna duda, modificarlo. Podrían inyectar anuncios, o algún malware, o capturar cualquier contraseña que mandes, lo que se conoce como un ataque man-in-the-middle.

La diferencia con HTTPS es que va encriptado desde su origen hasta su destino, lo que significa que nada ni nadie puede leer la información intercambiada entre un usuario y el servidor.

Puertos

Por defecto, HTTP funciona en el puerto 80, mientras que HTTPS en el 443. Sin embargo, estos puertos pueden ser modificados en el servidor, y entonces deberán ir indicados en la URL:

http://mikelgoig.com
http://mikelgoig.com:8080/about
https://mikelgoig.com:8081/about

Velocidad

¡HTTPS es más rápido que HTTP!

Si pensabas que el protocolo TLS utilizado por HTTPS hacía que las páginas fueran más lentas, estás equivocado.

¿Por qué? Por la aparición de HTTP/2, la nueva versión del protocolo HTTP, que puede servir peticiones en paralelo y comprime los paquetes, y como habrás imaginado, requiere una conexión segura, así que sólo funciona con HTTPS.

Puedes ver un ejemplo real en: https://www.httpvshttps.com/.

SEO

¡HTTPS puntúa mejor en SEO que HTTP!

Google, además de marcar todos los sitios web HTTP como no seguros en Chrome, da ventaja a aquellos que soporten HTTPS.

¿Cómo puedes empezar a utilizar HTTPS en tu sitio web?

Hoy en día, gracias a los certificados gratuitos emitidos por Let's Encrypt, es muy sencillo tener HTTPS en todos tus dominios.

Cabeceras de las respuestas HTTP

Cada respuesta HTTP tiene un conjunto de cabeceras. Vamos a verlas en detalle.

Cabeceras estándar

ACCEPT-PATCH

Accept-Patch: text/example;charset=utf-8

Especifica qué formatos de documento soporta el servidor.

ACCEPT-RANGES

Accept-Ranges: bytes

El rango de contenido que admite el servidor.

AGE

Age: 12

El tiempo que el objeto ha estado en una caché proxy, en segundos.

ALLOW

Allow: GET, HEAD

Métodos válidos para un recurso específico.

ALT-SVC

Alt-Svc: http/1.1="http2.example.com:8001"; ma=7200

Un servidor utiliza el encabezado "Alt-Svc" para indicar se puede acceder a sus recursos utilizando un protocolo diferente, o una ubicación (host o puerto) diferente.

CACHE-CONTROL

Cache-Control: max-age=3600 Cache-Control: no-cache, no-store, max-age=0, must-revalidate

La opción no-cache le indica al navegador que nunca utilice una versión cacheada de un recurso sin antes verificar el valor de ETag.

max-age se mide en segundos.

La opción más restrictiva no-store le indica al navegador (y a todos los nodos intermediarios de la red) que ni siquiera se almacene el recurso en su caché.

CONNECTION

Connection: close

Opciones de control para la conexión actual. Obsoleto en HTTP/2.

CONTENT-DISPOSITION

Content-Disposition: attachment; filename="file.txt"

Abre el cuadro de diálogo "Descargar archivo".

CONTENT-ENCODING

Content-Encoding: gzip

El tipo de codificación de datos utilizada.

CONTENT-LANGUAGE

Content-Language: en

El lenguaje del contenido incluido.

CONTENT-LENGTH

Content-Length: 348

La longitud del cuerpo de la respuesta expresada en bytes.

CONTENT-LOCATION

Content-Location: /index.htm

Una ubicación alternativa para los datos devueltos.

CONTENT-RANGE

Content-Range: bytes 21010-47021/47022

Donde aparece el mensaje dentro del cuerpo completo.

CONTENT-TYPE

Content-Type: text/html; charset=utf-8

El tipo MIME del contenido.

DATE

Date: Tue, 15 Nov 1994 08:12:31 GMT

La fecha y hora en que se envió el mensaje (en formato "HTTP-date").

DELTA-BASE

Delta-Base: "abc"

Especifica la etiqueta de entidad de codificación-delta de la respuesta.

ETAG

ETag: "737060cd8c284d8a[...]"

Un identificador para una versión específica de un recurso.

EXPIRES

Expires: Sat, 01 Dec 2018 16:00:00 GMT

Indica la fecha/hora después de la cual la respuesta se considera obsoleta (en formato "HTTP-date").

IM

IM: feed

Manipulaciones aplicadas a la respuesta.

LAST-MODIFIED

Last-Modified: Mon, 15 Nov 2017 12:00:00 GMT

La última fecha de modificación para el contenido solicitado (en formato "HTTP-date").

Link: </feed>; rel="alternate"

Se usa para expresar una relación con otro recurso.

LOCATION

Location: /pub/WWW/People.html

Se usa en la redirección, o cuando se ha creado un nuevo recurso.

PRAGMA

Pragma: no-cache

Campos específicos que pueden tener diversos efectos en cualquier lugar a lo largo de la cadena request-response.

PROXY-AUTHENTICATE

Proxy-Authenticate: Basic

Solicitar autenticación para acceder al proxy.

PUBLIC-KEY-PINS

HTTP Public Key Pinning anuncia el hash del certificado TLS del sitio web.

RETRY-AFTER

Retry-After: 120 Retry-After: Fri, 07 Nov 2014 23:59:59 GMT

Si una entidad no está disponible temporalmente, le indica al cliente que lo intente de nuevo más tarde. El valor puede ser un período de tiempo específico (en segundos) o una fecha HTTP.

SERVER

Server: Apache/2.4.1 (Unix)

El nombre del servidor.

Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

Una cookie HTTP.

STRICT-TRANSPORT-SECURITY

Strict-Transport-Security: max-age=16070400; includeSubDomains

Una política HSTS que informa al cliente HTTP cuánto tiempo almacenar en caché la política de solo HTTPS, y si esto se aplica a los subdominios.

TRAILER

Trailer: Max-Forwards

Indica que el conjunto de campos de encabezado dado está presente en el avance de un mensaje codificado con codificación de transferencia fragmentada.

TRANSFER-ENCODING

Transfer-Encoding: chunked

El tipo de codificación utilizada para transferir de forma segura los datos al usuario. Los métodos actualmente definidos son: chunked, compress, deflate, gzip, identity. Obsoleto en HTTP/2.

TK

Tk: ?

Cabecera Tracking Status. Valor sugerido para enviar como respuesta a un DNT (do not track).

Posibles valores:

  • !: en construcción
  • ?: dinámica
  • G: puerta de enlace a varias partes
  • N: no seguimiento
  • T: seguimiento
  • C: seguimiento con consentimiento
  • P: seguimiento solo si ha sido consentido
  • D: sin tener en cuenta DNT
  • U: actualizado

UPGRADE

Upgrade: h2c, HTTPS/1.3, IRC/6.9, RTA/x11, websocket

Pídale al cliente que actualice a otro protocolo. Obsoleto en HTTP/2.

VARY

Vary: Accept-Language Vary: *

Le indica a los proxys siguientes cómo unir los futuros encabezados de las solicitudes para decidir si se puede usar la respuesta en caché en lugar de solicitar una nueva del servidor de origen.

VIA

Via: 1.0 fred, 1.1 example.com (Apache/1.1)

Informa al cliente de los proxies a través de los cuales se envió la respuesta.

WARNING

Warning: 199 Miscellaneous warning

Una advertencia general sobre posibles problemas con el cuerpo de la entidad.

WWW-AUTHENTICATE

WWW-Authenticate: Basic

Indica el esquema de autenticación que se debe usar para acceder a la entidad solicitada.

Cabeceras CORS

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Credentials
  • Access-Control-Expose-Headers
  • Access-Control-Max-Age
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers

Cabeceras no estándar

CONTENT-SECURITY-POLICY

Ayuda a proteger contra los ataques XSS.

REFRESH

Refresh: 10;http://www.example.org/

Redirigir a una URL después de un retraso arbitrario, expresado en segundos.

X-POWERED-BY

X-Powered-By: Brain/0.6b

Puede ser utilizado por los servidores para enviar su nombre y versión.

X-REQUEST-ID

Permite al servidor pasar una ID de solicitud que los clientes pueden enviar de vuelta para permitir que el servidor correlacione la solicitud.

X-UA-COMPATIBLE

Indica la versión de Internet Explorer que se debería usar. Solo se usa si se da soporte a IE8 o IE9.

X-XSS-PROTECTION

Ha sido reemplazada por la cabecera Content-Security-Policy. Se usaba en los navegadores más antiguos para detener la carga de las páginas cuando se detecta un ataque XSS.