Intercepting All Responses

You can create an override to CEO's interceptor system that will run before all the other interceptors and run for every request. First, you have to create custom module.

Then, create a new global interceptor to run for all cached and uncached responses:

library/src/Interceptors/GlobalInterceptor.php:

<?php
namespace Tsn\Interceptors;

use Ceo\Http\Response;

/**
 * Example of a client global interceptor
 */
class GlobalInterceptor extends \Ceo\Interceptors\AllInterceptor
{
    public function afterRenderUncached($content)
    {
        $content = parent::afterRenderUncached($content);
        $this->response->setHeader('X-TSN-GBL', 'true');
        return $content;
    }

    public function afterRenderCached($content)
    {
        $content = parent::afterRenderCached($content);
        $this->response->setHeader('X-TSN-GBL', 'true');
        return $content;
    }
}

Then in your ceo-site.php config file, add the following line to the interceptors config:

...
    'view'          => [
        ...
        'interceptors'  => [
            'global'                         => '\Tsn\Interceptors\GlobalInterceptor',
            ...
        ]
    ]
...

Now that interceptor will run for every request.