Serve a qualcosa lo status HTTP 410?

In questo post vorrei esporre i risultati di un esperimento condotto l'anno scorso. Obiettivo del test era verificare il comportamento di crawler e client in caso di status HTTP 410.

Che cos'è lo status HTTP 410?

Come ben saprà chi legge abitualmente questo blog o si interessa di server, un server può restituire diversi status code in risposta ad una richiesta di una pagina web. Tra gli status code pià famosi troviamo

  • HTTP 200 in caso di risposta completata con successo
  • HTTP 404 in caso di risorsa non trovata
  • HTTP 403 in caso di accesso non consentito

Lo status code restituito da un server è fondamentale e determina il risultato di una risposta HTTP. Parlando di motori di ricerca, lo status code influenza il posizionamento di una pagina così come la sua indicizzazione.

Lo status code 410 rappresenta la risposta in caso di risorsa non più disponibile. La sua definizione tecnica è HTTP 410 Gone. Per certi versi è molto simile al 404 poiché entrambi identificano una risorsa irraggiungibile, tuttavia esiste una differenza non banale:

  • lo status code 404 indica una risorsa non disponibile.
  • lo status code 410 indica una risorsa non più disponibile.

In altre parole, lo status code 410 implica che a quell'indirizzo prima fosse disponibile una risorsa che, al momento, è stata rimossa. Al contrario, lo status code 404 non fornisce questo dettaglio: l'indirizzo richiesto forse non ha mai ospitato una risorsa, forse sì... non si sa.

Agli occhi della maggior parte dei client ciò che conta è il risultato. In entrambi i casi ci troviamo di fronte ad una risorsa non disponibile e l'errore va gestito. Alcuni software rimuovono la risorsa dai propri indici, altri la nascondono, altri ancora mettono in atto azioni correttive per verificare un'eventuale collocazione alternativa.

La maggior parte dei motori di ricerca afferma di gestire lo status code 410 allo stesso modo del 404. Obiettivo del mio test era verificare quest'affermazione sfruttando la necessità di voler rimuovere un feed non più disponibile.

Numero di richieste HTTP

Il grafico seguente riassume le richieste HTTP inviate alla pagina /atom.xml prima e dopo l'impostazione dello status code HTTP 410, il 5 Ottobre 2008.

Nota. Per ingrandire i valori potete con il mouse selezionare una porzione del grafico. Lo script provvederà ad ingrandire a schermo solo il range che avete evidenziato.

You need to upgrade your Flash Player

I risultati

Analizzando i risultati dell'esperimento è possibile osservare diversi comportamenti curiosi. Ecco alcune mie considerazioni, in ordine sparso.

  1. Contrariamente ad ogni mia aspettativa, lo status HTTP 410 è supportato da una buona fetta dei client web: crawler, motori di ricerca, parser... E' possibile notare come, nel giro di qualche giorno, le richieste alla pagina sono diminuite sensibilmente.
  2. A differenza dello status HTTP 404, lo status HTTP 410 ha un effetto quasi immediato. Teoricamente parlando questo ha un senso ma, anche in questo caso, non mi sarei aspettato una così concreta aderenza alle specifiche. Il motivo per il quale l'HTTP 410 è così immediato è da ricercare nel suo significato: la volontà di azione. A differenza del 404 che potrebbe essere casuale o involontario, l'HTTP 410 non è uno status code predefinito e viene impostato deliberatamente. Questa sottile differenza autorizza il client ad agire senza eccessivi controlli aggiuntivi, come avviene invece nel caso di un HTTP 404.
  3. A differenza dello status HTTP 404, buona parte dei client mette in atto un processo di rimozione irreversibile. In altre parole, una volta appurata la non disponibilità della risorsa, i client limitano i controlli periodici ad una frequenza inferiore a quella normalmente prevista per un HTTP 404.

In conclusione, direi che è possibile affermare con una discreta certezza che l'HTTP 410 è efficace. Inoltre, sembra essere dimostrato che per rimuovere velocemente una pagina dalla rete questo status code rappresenta una soluzione più efficace rispetto alla semplice cancellazione del file dal server e conseguente HTTP 404.