X-SendFile es una cabecera que puede mandar un lenguaje de scripting como PHP, Python, Perl, Ruby mediante CGI (o equivalente) o una aplicación FastCGI y que es preprocesada por el servidor (sin llegarse a mandar al cliente) y que indica al servidor que tiene que servir un archivo estático en lugar de mandar la salida producida por el CGI.

Supongamos que queremos mandar un archivo grande desde un CGI mediante autentificación. La forma tradicional ha sido siempre establecer la cabecera Content-Type y mandar los datos binarios en churro. Algunos sistemas sofisticados incluso parseaban las cabeceras HTTP para soportar mandar trozos del archivo. Sin embargo cada una de estas peticiones requiere tener un script usando memoria el rato, comunicándose con el servidor que a su vez hace de puente mandando los datos al cliente.

Pues bien. Con X-SendFile basta con mandar esta cabecera indicando el path al archivo que queremos mandar y finalizar la petición GGI/FastCGI. El script está en memoria el tiempo que le cuesta verificar la autentificación y mandar una única cabecera al servidor. Y esto es mucho más eficiente con diferencia. Incluso podemos guardar una sesión indicando que el usuario está autenticado para evitar tener que comprobar las credenciales cada vez. El navegador del usuario mandará al cookie correspondiente y podremos acceder a la sesión de forma rápida. El servidor ya se encargará de procesar las cabeceras para enviar los datos que el usuario pida:

En PHP:

header('X-SendFile: /path/to/my/file');

La cabecera X-SendFile la implementan los servidores populares, o bien en el core como es en el caso de lighttpd y nginx, o bien como parte de una extensión como en el caso de mod_xsendfile para apache.

Cada servidor gestiona la cabecera de una forma, permitiendo especificar parámetros de configuración y restricciones de seguridad por configuración Lo suyo para usarlo es ver el servidor que estamos usando y leer la documentación pertinente.