Vai al contenuto
EuroVPSEuroVPS

Guida completa ai codici di stato HTTP: la serie 300

I codici di stato HTTP 300 sono riservati ai redirect. La maggior parte dei redirect è trasparente per l'utente finale e viene gestita interamente dallo user-agent.

Di Thomas

Aggiornato il 22 ottobre 20266 min di lettura
Immagine di copertina: guida agli errori HTTP, serie 300

Per capire meglio perché i redirect siano così importanti, può aiutare capire perché un redirect venga usato in primo luogo.

I redirect di solito nascono da un cambiamento. Può essere un cambiamento di risorse di calcolo, di terminologia di marketing, di policy, di strategia SEO o di operatività aziendale. Da qualche parte qualcosa è cambiato e richiede che lo stesso URI sia accessibile in una posizione diversa.

Quando si fanno cambiamenti, i motori di ricerca e le altre risorse conservano i vecchi link finché il sito non viene reindicizzato.

L'alternativa a un redirect sarebbe un errore 404 «documento non trovato».

Uno scenario estremo che obbliga a reindirizzare uno user-agent è un'azienda che riorganizza la propria linea di prodotti. Diciamo, per esempio, che ACME Co. abbia spostato la linea Widgets in ACME Labs. La policy attuale di ACME prevede una struttura web del tipo: acmeco/{division}/{productline}.

ACME potrebbe quindi avere:

www.acme.com
www.acme.com/marketing/seotechnologies/
www.acme.com/marketing/billboards/
www.acme.com/consumergoods/sports/
www.acme.com/consumergoods/clothing/
www.acme.com/consumergoods/widgets/
www.acme.com/labs/widgets/
www.acme.com/labs/foobars/
www.acme.com/labs/betaproducts/

ACME Widgets si è trovata a www.acme.com/consumergoods/widgets/ negli ultimi 5 anni e riceve decine di migliaia di visite all'ora a quell'indirizzo.

Immaginate quanto fatturato potrebbe costare ad ACME Co. questo semplice spostamento, in vendite perse, in servizio clienti che risponde ai reclami, e in dirigenti al telefono per dichiarazioni ufficiali alla stampa sull'amata linea Widget?

E i motori di ricerca? Una buona parte delle vendite dei Widget di ACME Co. arriva dai motori di ricerca. Senza contare la campagna Google Ads e l'URL su brochure e biglietti da visita.

Un redirect della serie 300 può risolvere il problema per tutti in ACME Co. ACME può semplicemente configurare il web server perché reindirizzi tutte le richieste per www.acme.com/consumergoods/widgets/ a www.acme.com/labs/widgets/.

(hr)

Un esempio reale di redirect 301

In EuroVPS usiamo un redirect 301 per assicurarci che i visitatori usino il protocollo sicuro HTTPS.

Ecco esattamente come il redirect 301 garantisce che ogni visitatore acceda in HTTPS quando visita EuroVPS:

  1. lo user-agent richiede http://www.eurovps.com/
  2. il web server risponde con un codice di stato 301
  3. il web server imposta un header Location verso la versione https
  4. la maggior parte degli user-agent reindirizza automaticamente al nuovo URL
  • figure (alignleft): src /blog/wp-content/uploads/2017/12/JkGXds1-300x167.jpg (unchanged, 300x167); alt: Redirect quando l'header Location non viene seguito; caption: viene mostrato un messaggio agli user-agent che non rispettano l'header Location.

I redirect si possono realizzare in linguaggi di scripting come Python Django, PHP e ASP .Net. Una soluzione più robusta, però, è lasciare i redirect al web server con una regola di rewrite.

Redirect in PHP:

  <?php // Permanent 301 Redirect via PHP
  	header("HTTP/1.1 301 Moved Permanently");
  	header("Location: https://eurovps.com/");
  	exit; // stop the script once the redirect is sent

Il problema di fare i redirect a questo livello alto è che potremmo finire per modificare 100 pagine! O peggio, mettere mano al codice di un content management system che forse non fa i redirect come vorremmo.

Una soluzione molto più elegante è far fare tutti i redirect al web server.

In Apache i redirect si possono fare così:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

In nginx lo stesso redirect è una riga nel blocco server che ascolta sulla porta 80:

server {
    listen 80;
    server_name www.example.com;
    return 301 https://$host$request_uri;
}

(hr)

I redirect con codice di stato 300

300 Multiple Choices

300 Multiple Choices è un redirect raramente usato nel mondo reale. Si incontra quando una risorsa richiesta punta a più destinazioni per lo stesso documento. All'utente finale viene presentata una scelta, che gli permette di selezionare l'opzione desiderata.

301 Moved Permanently

I redirect 301 sono comuni perché i motori di ricerca trattano un 301 come uno spostamento permanente: aggiornano il loro indice al nuovo URI e vi trasferiscono i segnali di ranking.

Quando un client incontra un 301, i segnalibri e gli user-agent automatici dovrebbero essere aggiornati al nuovo URI.

302 Found

I redirect 302 vanno usati quando un URI richiesto si trova temporaneamente in una nuova posizione. Lo user-agent segue l'header Location fino all'URI temporaneo. Per ragioni storiche la maggior parte dei client trasforma una POST in una GET quando segue un 302; usate un 307 quando il metodo deve essere conservato.

A differenza del 301, gli user-agent dovrebbero continuare a usare l'URI originale, perché si tratta di un redirect temporaneo.

303 See Other

Il 303 serve soprattutto per richieste POST e PUT che vengono portate a un URI diverso da quello richiesto in origine dallo user-agent nella sua richiesta POST o PUT.

Un esempio potrebbe essere il caricamento di un file grande che richiede qualche minuto:

  1. lo user-agent invia un file grande con PUT o POST
  2. il file è destinato all'URI originale
  3. il web server restituisce un 303 che reindirizza a una pagina di stato del caricamento
  4. lo user-agent userà GET tramite il 303, richiedendo la pagina di stato del caricamento

304 Not Modified

Il 304 Not Modified è usato a fini di caching. Il 304 viene inviato come stato a uno user-agent che chiede di verificare lo stato attuale di una pagina in cache.

Se la pagina richiesta è ancora attuale, il server risponde con un 304 e senza corpo, e lo user-agent mostra all'utente finale la propria copia in cache.

  • figure (aligncenter): src /blog/wp-content/uploads/2017/12/TRSLcUS.jpg (unchanged, 866x524); alt: Redirect 304; caption: Qui sopra, una verifica su un file javascript in cache.

305 Use Proxy (deprecato)

305 Use Proxy è deprecato. L'attuale specifica HTTP, la RFC 9110, lo elenca come non più in uso, e i browser non lo applicano. Non usatelo.

307 Temporary Redirect

Il 307 è simile al 302 ma richiede che sull'URI reindirizzato venga usato lo stesso metodo di richiesta. Si userebbe, per esempio, quando una richiesta POST deve essere inviata a un altro URI.

Con un 302, la maggior parte dei client passa a una richiesta GET per ottenere l'URI reindirizzato.

308 Permanent Redirect

Il 308 è la controparte permanente del 307. Come un 301, dice ai client che la risorsa si è spostata definitivamente; come un 307, richiede che il client ripeta la richiesta con lo stesso metodo. Usatelo quando uno spostamento permanente deve mantenere una POST come POST.

I codici di stato di questa guida sono definiti nella RFC 9110 (HTTP Semantics).

label: Letture correlate

link: Guida completa ai codici di stato HTTP: la serie 400 (anchor = h1 of the Italian manuscript; href unchanged)

Dall'archivio del blog EuroVPS, pubblicato per la prima volta il 12 dicembre 2019.

Tutte le note dal campo