Drupal: Añadir custom headers al portal

headers
Solucionex
08
Mayo 25

Hay veces que según que web se use para analizar las cabeceras de un portal web se reporte que faltan algunas que Drupal no permite incorporar por defecto. Para no andar instalando módulos con extensa configuración y, sobre todo, por que su funcionamiento no es el mejor, se aporta la siguiente solución:

  • Generar un módulo custom o usar ya un módulo existente.

    • En caso de tener que generar un módulo custom:

      drush gen module
  • Crear un EventSubscriber, en este caso se creará el ResponseSubscriber.php (src/EventSubscriber/ResponseSubscriber.php) y añadirlo al [MODULE].services.yml

      [MODULE].response_subscriber:
        class: Drupal\slx\EventSubscriber\ResponseSubscriber
  • Es importante definir los headers necesarios en la constante HEADERS.

    <?php
    
    namespace Drupal\[MODULE]\EventSubscriber;
    
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    use Symfony\Component\HttpKernel\Event\ResponseEvent;
    use Symfony\Component\HttpKernel\KernelEvents;
    
    /**
     * Response Subscriber service.
     */
    final class ResponseSubscriber implements EventSubscriberInterface {
    
      /**
       * List of headers.
       */
      const HEADERS = [
        'permissions-policy' => '',
        'cross-origin-embedder-policy' => 'same-origin',
      ];
    
      /**
       * Get SubscribedEvents.
       */
      public static function getSubscribedEvents(): array {
        $events[KernelEvents::RESPONSE][] = ['onResponse'];
        return $events;
      }
    
      /**
       * Add headers to response.
       */
      public function onResponse(ResponseEvent $event): void {
        $response = $event->getResponse();
        foreach (static::HEADERS as $header => $value) {
          $response->headers->set($header, $value);
        }
      }
    
    }

Perfectamente se podría añadir un formulario de configuración para guardar a nivel de configuración y base de datos los valores clave valor de las cabeceras.

Drupal