Rimuovi i cookies dalle risorse statiche

Quando il browser richiede una risorsa statica come un’immagine, un foglio di stile o uno script, invia al server tutti i cookie e lo fa a ogni richiesta.
Se la tua pagina richiede 10 script, invia 10 volte i cookie.
Come probabilmente hai sentito, un modo per risolvere questo problema è servire le risorse statiche da un sottodominio senza cookie.
Questa è una possibile soluzione, ma a volte non hai voglia di creare un sottodominio solo per le risorse statiche e dare istruzioni a WordPress per recuperarle dal sottodominio.
Siamo onesti, chi lo fa?

Perché questo problema non dovrebbe essere affrontato direttamente con il browser?
Perché il browser è così stupido? Perché deve inviare ogni volta i cookie per le risorse statiche?
C’è un modo per risolvere questo problema alla radice?

Sì, c’è, ma la soluzione funzionerà solo con i browser moderni che supportano l’ attributo crossorigin . Sono anche i browser più utilizzati, quindi la situazione non è poi così male.

L’idea è semplicemente quella di aggiungere crossorigin=”anonymous” a tutti gli script, link e immagini richiesti. Nient’altro.

Traduciamo questa idea in un codice che funzioni con il nostro sito WordPress.

add_action( 'wp_head','eos_rcfsr_ob_start',0 );
add_action( 'wp_footer','eos_rcfsr_ob_start',0 );

function eos_rcfsr_ob_start(){
    ob_start();
}

add_action( 'wp_head','eos_rcfsr_add_crossorigin_to_head_and_footer',PHP_INT_MAX );
add_action( 'wp_footer','eos_rcfsr_add_crossorigin_to_head_and_footer',PHP_INT_MAX );

function eos_rcfsr_add_crossorigin_to_head_and_footer(){
    $html = ob_get_clean();
    $html = eos_rcfsr_add_crossorigin_to_tag( $html,array( 'script','link' ) );
    echo $html;
}

add_filter( 'the_content',function( $content ){
    $content = eos_rcfsr_add_crossorigin_to_tag( $content,array( 'img' ) );
    return $content;
} );

function eos_rcfsr_add_crossorigin_to_tag( $html,$tags ){
    foreach( $tags as $tag ){
        $pattern = in_array( $tag,array( 'script' ) ) ? sprintf( '/<%s((?!crossorigin).)+%s>/i',$tag,$tag ) : sprintf( '/<%s((?!crossorigin).)+>/i',$tag );
        preg_match_all( $pattern,$html,$arr );
        if( $arr && is_array( $arr ) && isset( $arr[0] ) ){
            foreach( $arr[0] as $l ){
                if( false !== strpos( $l,'src' ) || false !== strpos( $l,'href' ) ){
                    $nl = str_replace( '<'.$tag,'<'.$tag.' crossorigin="anonymous"',$l );
                    $html = str_replace( $l,$nl,$html );
                }
            }
        }
    }
    return $html;
}

Dopo aver aggiunto il codice sopra, tutte le immagini, gli script e i link a risorse esterne avranno l’attributo crossorigin, come mostrato nell’immagine.

Remove cookies from static resources with the crossorigin attribute

Questa soluzione non funzionerà per tutte le risorse aggiunte con JavaScript o CSS.

Dovresti vedere un miglioramento nelle prestazioni nel caso di molte richieste HTTP a risorse statiche con molti dati memorizzati nei cookie.
In tutti gli altri casi, non hai bisogno di rimuovere i cookie dalle risorse statiche, poiché non avresti bisogno di servire risorse statiche da un dominio senza cookie.
La rimozione dei cookie dalle risorse statiche non è sempre il salvataggio delle prestazioni che alcune persone ritengono. Questo non è assolutamente vero nella maggior parte dei casi.
Nella maggior parte dei casi, i cookie non sono la causa delle scarse prestazioni, ma delle risorse stesse. In quei casi, sarebbe più efficace rimuovere completamente le risorse di cui non hai bisogno ovunque con Freesoul Deactivate Plugins .

Naturalmente, rimuovere i cookie dalle risorse statiche migliora anche la privacy dei tuoi visitatori, quindi potrebbe essere una buona idea farlo.

Se vuoi puoi usare il plugin Remove Cookies From Static Resources .
Il plugin è solo un contenitore del codice presentato in questo post.
Non ha impostazioni, non aggiunge richieste HTTP e non fa query al database.
Lo troverai nella pagina dei plugin del tuo backend se cerchi Remove Cookies From Static Resources.