Detectar petición AJAX con PHP

Detectar petición AJAX con PHP

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?

  1. Seguridad: Puedes restringir ciertas operaciones sensibles solo a llamadas AJAX desde tu propia aplicación.
  2. Experiencia de usuario: Permite ofrecer respuestas diferentes (JSON vs HTML completo) según cómo se acceda.
  3. 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

  1. No es 100% confiable: Las cabeceras HTTP pueden ser falsificadas.
  2. No todos los clientes AJAX la envían: Algunas librerías modernas podrían no incluirla por defecto.
  3. Debe complementarse con otras medidas: Como tokens CSRF y validación de origen.