Quando i robot di Google vanno a leggere una pagina già conosciuta per rilevare eventuali aggiornamenti, usano uno stratagemma per evitare di scaricare file fisici (immagini, fogli di stile, script e così via) che non sono variati dopo l’ultima acquisizione.
Il metodo usato dal crawler di Google
Nella documentazione Panoramica dei crawler e dei fetcher di Google, viene descritto l’uso fatto a questo scopo di due coppie di HTTP header:
- (response)
ETag> (request)If-None-Match - (response)
Last-Modified> (request)If-Modified-Since.
Quando scarica un file per la prima volta, il crawler di Google conserva due HTTP Response Header del file: ETag (Entity Tag) e Last-Modified. Il primo header fornisce un codice univoco generato a partire dal file (come un’impronta hash); il secondo è la data di ultima modifica del file espressa nel formato standard http sulla data/ora (ad esempio: Wed, 01 Jun 2023 08:00:00 GMT).
La volta successiva che il crawler richiede il file, invia l’HTTP Request Header If-None-Match con l’ETag ricevuto la volta precedente come parametro. Il server confronta l’ETag della richiesta con l’ETag attuale del file richiesto: se i due valori coincidono, invece che restituire il file (operazione inutile, in quanto identico a quello già inviato la volta precedente), invia in risposta uno stato HTTP 304 - Not Modified; in caso contrario restituisce il nuovo file, con uno stato HTTP 200.
In alternativa a questo metodo, il crawler Google anziché inviare l’header If-None-Match, può inviare l’header If-Modified-Since con il valore Last-Modified ricevuto la volta precedente. Analogamente al caso precedente, il server confronta la data presente nella richiesta con quella di ultima modifica del file richiesto: se i due valori coincidono, invece che restituire il file, invia in risposta uno stato HTTP 304 - Not Modified; in caso contrario restituisce il nuovo file, con uno stato HTTP 200.
Tutto ciò però funziona solo se il web server:
- invia in output gli HTTP Header
ETageLast-Modified(entrambi o almeno uno dei due) - interpreta correttamente gli Header in input
If-None-MatcheIf-Modified-Since(entrambi o almeno uno dei due)
Per sapere se il tuo web server svolge queste attività puoi chiedere al supporto tecnico, oppure puoi applicare il procedimento descritto di seguito.
Scegliere un file per la prova e verificare i Response Header
Per effettuare la prova è necessario un file fisico (una pagina html dinamica, come quelle generata dai CMS, non otterrà gli Header che ci servono), io ho scelto il file javascript:
https://serviziweb.padova.it/wp-content/themes/divi%20child/assets/js/nonfloatingfooter.js (figura 1). Per verificare il comportamento del tuo web server dovrai usare un file presente sul tuo sito.

- Aprire il link precedente con il browser Chrome, in modo a visualizzare il codice javascript;
- aprire la pagina degli Strumenti degli sviluppatori del browser (di seguito solo “Strumenti”) utilizzando il percorso
Menu principale(i tre pallini in alto a destra) >Altri Strumenti>Strumenti per gli sviluppatori(la scorciatoia da tastieraF12ottiene lo stesso risultato); - selezionare la voce di menu
Rete(nella finestra degli Strumenti); - posizionarsi sulla finestra di Chrome e premere i tasti
CTRL + F5per ricaricare la pagina e tornare poi nella finestra degli Strumenti; - verificare che il file non sia stato preso dalla cache del browser: se la dimensione del file presenta un valore numerico, allora è stato scaricato dal server, in caso contrario nella colonna Dimensione compare la scritta
(memoria cache), vedi Figura 2 (clicca sull’immagine per ingrandirla).

- cliccare sul nome del file per vedere le intestazioni HTTP e verificare che siano presenti gli header
EtageLast-Modified. Come si può vedere in figura 3. il server ha superato la prima parte della prova (cliccare sull’immagine per ingrandirla).

Generare un Header HTTP If-None-Match
Si deve ora simulare il crawler Google e verificare che il web server gestisca gli HTTP header in ingresso.
- scaricare l’estensione del browser Chrome ModHeader, che permette di modificare le intestazioni HTTP delle richieste inviate da Chrome;
- impostare l’header
If-None-Matchcon lo stesso valore dell’ETagappena ricevuto dal web server (le doppie virgolette sono obbligatorie, il prefisso “W/” è facoltativo, se viene messo, però, dev’essere in maiuscolo);

- aggiornare la pagina Chrome con i tasti
CTRL+F5; - controllare sulla pagina Strumenti che il web server restituisca uno stato HTTP 304, come in figura 5. (cliccare sull’immagine per ingrandirla)

Generare un Header HTTP If-Modified-Since
- impostare l’header
If-Modified-Sincecon lo stesso valore dell’headerLaat-Modifiedappena ricevuto dal web server (Per ottenere lo stato 304 non basta che la data impostata inIf-Modified-Sincesia successiva aLast-Modified; deve corrispondere esattamente alla data di ultima modifica; rispettare il formato della data, come nell’esempio di figura 6.);

- aggiornare la pagina Chrome con i tasti
CTRL+F5; - controllare sulla pagina Strumenti che il web server restituisca uno stato HTTP 304, come in figura 7. (cliccare sull’immagine per ingrandirla)

Risorse online
- il sito http.dev fornisce un elenco completo e dettagliato degli header HTTP.

0 commenti