En el desarrollo web moderno, a menudo necesitamos distinguir entre peticiones regulares y solicitudes AJAX para mejorar la seguridad o implementar comportamientos específicos. Veamos cómo hacer esta verificación de manera efectiva.
if(
!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'
){
# Aquí van las operaciones que se mostraran mediante una petición ajax
}else{
# Ejecutamos las instrucciones si no es Ajax
}
¿Por qué es importante esta comprobación?
- Seguridad: Puedes restringir ciertas operaciones sensibles solo a llamadas AJAX desde tu propia aplicación.
- Experiencia de usuario: Permite ofrecer respuestas diferentes (JSON vs HTML completo) según cómo se acceda.
- Prevención de acceso directo: Evita que usuarios accedan directamente a endpoints pensados para ser usados vía AJAX.
Cómo funciona
$_SERVER['HTTP_X_REQUESTED_WITH']
es una cabecera HTTP que los frameworks JavaScript como jQuery envían automáticamente en peticiones AJAX.
- Verificamos que no esté vacía (
!empty
).
- Convertimos a minúsculas (
strtolower
) para comparación case-insensitive.
- Comprobamos que el valor sea exactamente “xmlhttprequest”.
Limitaciones a considerar
- No es 100% confiable: Las cabeceras HTTP pueden ser falsificadas.
- No todos los clientes AJAX la envían: Algunas librerías modernas podrían no incluirla por defecto.
- Debe complementarse con otras medidas: Como tokens CSRF y validación de origen.