Cabeceras HTTP
Las cabeceras HTTP son cadenas de pares name:value
(nombre y valor separados por dos puntos) que se utilizan para comunicar información adicional y metadatos entre un cliente (normalmente un navegador web) y una aplicación en un servidor. Esta información puede incluir cómo están codificados los datos, cómo debe tratarlos el servidor, la antigüedad del documento, etc.
Las cabeceras de respuesta (de la aplicación al cliente) forman parte de la respuesta de la aplicación y pueden contener información como la ubicación del servidor, el nombre del servidor, etc.
Las cabeceras de petición (del cliente a la aplicación) son útiles si quieres personalizar tu aplicación. Algunos ejemplos son:
- Informar sobre distintos tipos de contenido según la región del cliente utilizando
CF-IPCountry
. - Utilizar
CF-Connecting-IP
para registrar la IP del cliente en el registro de actividad de la aplicación. - Realizar depuración o monitorización de sesiones de usuario utilizando
X-Request-ID
.
Cabeceras de Petición Añadidas por Kinsta
Cuando despliegas una aplicación en Kinsta, se utilizan las siguientes cabeceras para enviar información a la aplicación:
Host
: La cabecera host especifica el nombre de host y el número de puerto del servidor que se está solicitando.X-Request-ID
: Se utiliza para identificar una solicitud entre el cliente y el servidor. Esta cabecera puede ser útil a efectos de depuración.X-Real-IP
: Especifica la dirección IP real del cliente que ha realizado la petición. Los proxies inversos y los equilibradores de carga suelen utilizar esta cabecera para indicar la dirección IP original del cliente.X-Forwarded-For
: Se utiliza para especificar la dirección IP del cliente y también puede contener una lista de direcciones IP si la solicitud pasa por varios proxies.X-Forwarded-Host
: Especifica el host original solicitado por el cliente.X-Forwarded-Port
: Especifica el puerto utilizado por el cliente para realizar la solicitud.X-Forwarded-Proto
: Especifica el protocolo que utiliza el cliente para hacer la petición, como «HTTP» o «HTTPS»X-Forwarded-Scheme
: Especifica el esquema que utiliza el cliente para realizar la petición, como «HTTP» o «HTTPS»X-Scheme
: La cabecera es similar aX-Forwarded-Scheme
, y se utiliza para indicar el esquema original solicitado por el cliente.X-Original-Forwarded-For
: Especifica la dirección IP original del cliente en una solicitud que ha pasado por varios proxies.Accept-Encoding
: Especifica los tipos de codificación que el cliente puede aceptar en la respuesta, comogzip
odeflate
.CF-Ray
: Un identificador único generado por el servicio de Cloudflare para cada solicitud.CF-Visitor
: Utilizado por Cloudflare para transmitir al servidor información sobre el navegador y el dispositivo del cliente.CF-EW-Via
: Utilizado por el servicio Cloudflare Edge Workers para indicar que un Edge Worker procesó una solicitud.CDN-Loop
: Utilizado por algunas redes de distribución de contenidos para indicar que una solicitud está atascada en un bucle y necesita ser terminada.Accept
: Especifica los tipos de medios que el cliente puede manejar en la respuesta, comotext/html
oapplication/json
.User-Agent
: Especifica la cadena del agente de usuario del cliente, que puede utilizarse para identificar el navegador y el sistema operativo del cliente.CF-Connecting-IP
: Especifica la dirección IP del cliente que se está conectando al servidor a través de la red de Cloudflare.CF-Worker
: Se utiliza para indicar que un worker de Cloudflare ha procesado una solicitud.CF-IPCountry
: Especifica el código de país de la dirección IP del cliente, determinado por Cloudflare.
Visualización de las Cabeceras de Petición
Mientras que las cabeceras de respuesta se pueden ver con herramientas como HTTP Status and Redirect Checker de Kinsta, curl
, Postman, Insomnia, etc., ver las cabeceras de petición es un poco diferente. Para ver las cabeceras de petición, puedes utilizar el código de tu aplicación para ver e informar de las cabeceras que se le envían. Aquí tienes un ejemplo utilizando Python:
from http.server import BaseHTTPRequestHandler, HTTPServer
import loggingclass RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
logging.info("Solicitud GET,nRuta: %snHeaders:n%sn",
str(ruta.self), str(cabeceras.self))
self.enviar_respuesta(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
mensaje = f"{self.headers}"
self.wfile.write(bytes(mensaje, 'utf-8'))
returndef run(server_class=HTTPServer, handler_class=RequestHandler, port=8080):
logging.basicConfig(nivel=logging.INFO)
dirección_servidor = ('', puerto)
httpd = clase_servidor(dirección_servidor, clase_manejador)
logging.info('Iniciando httpd...n')
prueba:
httpd.serve_forever()
excepto InterrupciónTeclado:
pasa
httpd.server_close()
logging.info('Deteniendo httpd...n')if __name__ == '__main__':
from sys import argvif len(argv) == 2:
run(puerto=int(argv[1]))
si no:
ejecuta()