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
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
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ámicaG
: puerta de enlace a varias partesN
: no seguimientoT
: seguimientoC
: seguimiento con consentimientoP
: seguimiento solo si ha sido consentidoD
: sin tener en cuenta DNTU
: 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.