KernelEvents::REQUEST is not fired on cached pages I am trying to implement a KernelEvents::REQUEST event subscriber to perform some action on page load. 

I need this event to fire regardless of whether the requested page exists in the Drupal cache - it seems that KernelEvents::REQUEST does not fire when Drupal serves something from the cache.

Is there an event I can use to achieve this, or must I implement my requirements as some form of middleware?
The dynamic cache subscribes an event with priority 27. If you want that your code runs before that you have to use a priority >27:

  public static function getSubscribedEvents() {
    $events = [];

    // Run after AuthenticationSubscriber (necessary for the 'user' cache
    // context; priority 300) and MaintenanceModeSubscriber (Dynamic Page Cache
    // should not be polluted by maintenance mode-specific behavior; priority
    // 30), but before ContentControllerSubscriber (updates _controller, but
    // that is a no-op when Dynamic Page Cache runs; priority 25).
    $events[KernelEvents::REQUEST][] = ['onRequest', 27];


Which runs DynamicPageCacheSubscriber::onRequest..