Reindirizzamento HTTP: 301 (permanente) vs. 302 (temporaneo)


381

Il cliente dovrebbe comportarsi diversamente? Come?


RFC 2616 - Codici di stato HTTP Potrei ripetere tutto lì dentro, ma lo afferma abbastanza chiaramente;)
Tiemen

2
Vale la pena notare che la specifica fornisce anche codici di stato 303 e 307 per reindirizzamenti temporanei più sfumati.
Patrick McElhaney,

303 e 307 non sono più davvero necessari. 303 avrebbe dovuto specificare che il nuovo URL è correlato ma non equivalente e che dovrebbe essere caricato con GET anche se la richiesta corrente era POST, ma i browser lo fanno anche con 302 comunque. 307 avrebbe dovuto specificare esplicitamente che il reindirizzamento è temporaneo rispetto a 302, il che non ha specificato se fosse temporaneo, ma browser e crawler lo considerano comunque temporaneo.
thomasrutter,

Risposte:


569

Lo stato 301 indica che la risorsa (pagina) viene spostata in modo permanente in una nuova posizione. Il client / browser non dovrebbe tentare di richiedere la posizione originale ma utilizzare la nuova posizione da ora in poi.

Lo stato 302 indica che la risorsa si trova temporaneamente altrove e il client / browser dovrebbe continuare a richiedere l'URL originale.


12
Grazie. Ciò significa che se utilizzo un reindirizzamento 301 (permanente), il client può decidere di non recuperare più la vecchia posizione e di utilizzare sempre direttamente il nuovo URL?
flybywire,

18
Esattamente! In effetti, secondo le specifiche, il cliente DOVREBBE andare sempre nella nuova posizione.
Philippe Leybaert,

7
Ma in un browser, che effetto ha? Riscrivere la cronologia nel pulsante Indietro, ad esempio, per evitare di tornare a quella sbagliata in un 301? Se si fa clic su uno vecchio per modificare silenziosamente un segnalibro su 301?
Xavi Montero,

9
@XaviMontero La maggior parte dei browser moderni memorizza nella cache 301 e non si preoccuperà di richiedere la fonte originale per un massimo di 6 mesi
Jon

34
Trucchi per ricordare i codici di stato HTTP 301-> Perm e 302-> Temp Redirect Due inizia con T, lo stesso di Temporary inizia con T.
ScottCate

108

Quando un ragno del motore di ricerca trova 301 codice di stato nell'intestazione della risposta di una pagina Web, capisce che questa pagina Web non esiste più, cerca l'intestazione della posizione in risposta, seleziona il nuovo URL e sostituisce l'URL indicizzato con quello nuovo e trasferisce anche pagerank .

Quindi il motore di ricerca aggiorna tutto l'URL indicizzato che non esiste più (301 trovato) con il nuovo URL, questo manterrà il tuo vecchio traffico di pagine Web, pagerank e lo trasferirà a quello nuovo (non perderai il traffico della vecchia pagina Web).

Browser: se un browser rileva il codice di stato 301, memorizza nella cache la mappatura del vecchio URL con il nuovo URL, il client / browser non tenterà di richiedere la posizione originale ma utilizzerà la nuova posizione da ora in poi a meno che la cache non venga cancellata.

inserisci qui la descrizione dell'immagine

Quando uno spider dei motori di ricerca rileva lo stato 302 per una pagina Web, reindirizzerà temporaneamente alla nuova posizione e eseguirà la scansione di entrambe le pagine. Il vecchio URL della pagina web esiste ancora nel database del motore di ricerca e tenta sempre di richiedere la posizione precedente e di eseguirne la scansione. Il client / browser tenterà comunque di richiedere la posizione originale.

inserisci qui la descrizione dell'immagine

Maggiori informazioni su come implementarlo in asp.net c # e qual è l'impatto sui motori di ricerca - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html


35

Principalmente 301 vs 302 è importante per l'indicizzazione nei motori di ricerca, poiché i loro crawler tengono conto di ciò e trasferiscono PageRank quando usano 301.

Vedi la risposta di Peter Lee per maggiori dettagli.


20

301 è che alla risorsa richiesta è stato assegnato un nuovo URI permanente e qualsiasi riferimento futuro a questa risorsa dovrebbe essere fatto utilizzando uno degli URI restituiti.

302 è che la risorsa richiesta risiede temporaneamente con un URI diverso.

Poiché il reindirizzamento può essere modificato occasionalmente, il client dovrebbe continuare a utilizzare l'URI della richiesta per richieste future.

Questa risposta è memorizzabile solo se indicata da un campo di intestazione Controllo cache o Scadenza.


1
Quindi 301 ha senso, ma sto facendo fatica a trovare un buon esempio per 302 .
Bob Stein,

4
@ BobStein-VisiBone per esempio del reindirizzamento 302: crea un file old.php con il codice <?php header("location: http://example.com/new.php"); ?>e il file new.php - <?php echo 'I am new'; ?>e vai al link . Verrà reindirizzato e verrà visualizzato il testo "I am new". Quindi sostituire il codice in old.php <?php echo 'I am old'; ?>e andare anche al collegamento . Vedrai il testo "Sono vecchio". Se hai eseguito il reindirizzamento 301 in old.php, avresti visto il testo "I am new" anche dopo le modifiche al codice di old.php.
Apostolo

2
@ BobStein-VisiBone Ho una pagina che è obsoleta e non può essere mostrata. Dobbiamo creare una nuova pagina ma non saremo pronti per un po '. Usiamo un reindirizzamento temporaneo a una pagina esistente che ci è utile per i visitatori. Una volta creata la nuova pagina, utilizzeremo un reindirizzamento permanente su di essa.
EddieC,

4
302 è utile se l'URL di destinazione dipende dallo stato.
Brian,

7
Ora è passato un po 'di tempo, ma ecco un buon esempio. I webcomics di solito hanno un url che porta all'ultimo fumetto. Se questo è webcomic.com/lateste reindirizza a webcomic.com/some-comic-titlecon un 301 il browser reindirizzerà sempre a "un titolo a fumetti". Anche quando il prossimo fumetto è stato pubblicato e "ultimo" ora reindirizza a "un altro titolo di fumetto" ... Qui è dove un 302 sarebbe meglio.
hsan

17

301 reindirizzamenti vengono memorizzati nella cache a tempo indeterminato (almeno da alcuni browser).

Ciò significa che, se imposti un 301, visiti quella pagina, non solo verrai reindirizzato, ma quel reindirizzamento verrà memorizzato nella cache.

Quando visiti di nuovo quella pagina, il tuo Browser * non si preoccupa nemmeno di richiedere quell'URL, ma va solo alla destinazione di reindirizzamento memorizzata nella cache.

L'unico modo per annullare un 301 per un visitatore con quel reindirizzamento nella cache è reindirizzare nuovamente all'URL originale **. In tal caso, il browser noterà il ciclo e infine richiederà davvero l'URL inserito.

Ovviamente, questa non è un'opzione se hai deciso di 301 su Facebook o qualsiasi altra risorsa che non sei completamente sotto controllo.

Sfortunatamente, molti provider di hosting offrono una funzionalità nella loro interfaccia di amministrazione semplicemente chiamata "Reindirizzamento", che esegue un reindirizzamento 301. Se lo stai usando per reindirizzare temporaneamente il tuo dominio su Facebook come una pagina in arrivo, sei praticamente fregato.

* almeno Chrome e Firefox, secondo quanto tempo i browser memorizzano nella cache gli HTTP 301? . Ho appena provato con Chrome 45. Modifica: Safari 7.0.6 su Mac memorizza anche nella cache, il riavvio del browser non ha aiutato (Link dice che su Safari 5 su Windows aiuta.)

** Ho provato javascript window.location = '', perché sarebbe la soluzione che potrebbe essere applicata nella maggior parte dei casi - non funziona. Si traduce in un loop infinito non rilevato. Tuttavia, php header('Location: new.url')interrompe il ciclo

Bottom Line: usa 301s solo se sei assolutamente sicuro di non usare mai più quell'URL. Di solito mai nella directory principale (esempio.com/)


7

Il problema principale con 301 è che il browser memorizzerà il reindirizzamento nella cache anche se il reindirizzamento è stato disabilitato a livello di server.

È sempre meglio usare 302 se si sta abilitando il reindirizzamento per una breve finestra di manutenzione.


Non è sicuramente un "problema"; è come funziona. Reindirizzamento da HTTP a HTTPS, Reindirizzamento di un sito Web abbandonato su uno nuovo, ecc., Sono alcuni dei soliti usi di 301.
HosseyNJF
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.