2009-09-08 7 views
311

Il client deve comportarsi in modo diverso? Come?Reindirizzamento HTTP: 301 (permanente) vs. 302 (temporaneo)

+0

[RFC 2616 - Codici di stato HTTP] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) Potrei ripetere tutto lì dentro, ma lo afferma abbastanza chiaramente;) – Tiemen

+2

Vale la pena notando che la specifica fornisce anche i codici di stato 303 e 307 per reindirizzamenti temporanei più sfumati. –

risposta

489

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 da un'altra parte e il client/browser deve continuare a richiedere l'url originale.

+10

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

+14

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

+2

Questo ha qualche effetto sui motori di ricerca che ricordano certe pagine del tuo sito che ora non sono collegate? – rybo111

17

301 è che alla risorsa richiesta è stato assegnato un nuovo URI permanente e qualsiasi riferimenti futuri a questa risorsa DOVREBBE essere fatto utilizzando uno degli URI restituiti . 302 è che la risorsa richiesta risiede temporaneamente sotto un URI differente. Poiché il reindirizzamento può essere modificato occasionalmente, il cliente DOVREBBE continuare a utilizzare l'URI di richiesta per le richieste future. Questa risposta è solo se indicato da un campo Cache-Control o Expires .

+1

Quindi 301 ha senso, ma mi viene difficile trovare un buon esempio per ** 302 **. –

+4

@ BobStein-VisiBone per esempio del reindirizzamento 302: crea un file old.php con il codice ' 'e file new.php -' 'e vai al [link] (http://example.com/old.php). Ci sarà reindirizzare e visualizzare il testo "I am new". Quindi sostituire il codice in old.php in " 'e vai anche al [link] (http://example.com/old.php). Vedrai il testo "I am old". Se hai eseguito il reindirizzamento 301 in old.php, avresti visto il testo "I am new" anche dopo le modifiche nel codice di old.php. – Apostle

+1

@ BobStein-VisiBone Ho una pagina che è deprecata e non può essere mostrata. Dobbiamo creare una nuova pagina ma non sarà pronta per un po '. Usiamo un reindirizzamento temporaneo a una pagina esistente che è utile per i visitatori. Una volta creata la nuova pagina, utilizzeremo quindi un reindirizzamento permanente. – EddieC

28

Per lo più 301 vs 302 è importante per l'indicizzazione nei motori di ricerca, come i loro cingoli tenerne conto e di trasferimento PageRank quando si utilizza 301.

Vedere Peter Lee's answer per maggiori dettagli.

81

Quando uno spider di motori di ricerca trova 301 codici di stato nell'intestazione di risposta di una pagina Web, comprende che questa pagina Web non esiste più, cerca l'intestazione di posizione in risposta, seleziona il nuovo URL e sostituisce l'URL indicizzato con quello nuovo e anche trasferire il pagerank.

Così il motore di ricerca aggiorna tutti gli URL indicizzati che non esistono più (301 trovati) con il nuovo URL, questo manterrà il vecchio traffico della pagina web, il pagerank e lo devierà a quello nuovo (non perderete il traffico della vecchia pagina web).

Browser: se un browser trova 301 codice di stato quindi memorizza nella cache il 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 è cancellato.

enter image description here

Quando una spider dei motori di ricerca trova 302 di stato per una pagina web, che reindirizzerà solo temporaneamente nella nuova posizione e strisciare entrambe le pagine. Il vecchio URL della pagina web esiste ancora nel database del motore di ricerca e tenta sempre di richiedere la vecchia posizione e di eseguirne la scansione. Il client/browser tenterà comunque di richiedere la posizione originale.

enter image description here

Per saperne di più 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

+11

upvote per l'evidenziazione manuale con il mouse/dispositivo di input. – ahnbizcad

+2

Molto meglio rispondere a IMO. Più chiaro su cosa accade esattamente a livello tecnico, che è quello per cui la maggior parte delle persone probabilmente viene qui. – DarkNeuron

11

301 redirect vengono memorizzati nella cache a tempo indeterminato (almeno da parte di alcuni i browser).

Ciò significa che se si imposta un 301, visitare quella pagina, non solo viene reindirizzato, ma tale reindirizzamento viene memorizzato nella cache.

Quando si visita di nuovo quella pagina, il browser * non si preoccupa nemmeno di richiedere tale URL, ma si limita a raggiungere il target di reindirizzamento memorizzato nella cache.

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

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

Sfortunatamente, molti provider di hosting offrono una funzionalità nella loro interfaccia di amministrazione chiamata semplicemente "reindirizzamento", che esegue un reindirizzamento 301. Se stai usando questo per reindirizzare temporaneamente il tuo dominio a Facebook come pagina di prossima uscita, sei praticamente fottuto.

* almeno Chrome e Firefox, secondo How long do browsers cache HTTP 301s?. Appena provato con Chrome 45. Edit: Safari 7.0.6 su Mac memorizza nella cache anche, un riavvio del browser non ha aiutato (. Collegamento dice che su Safari 5 su Windows lo fa help)

** ho provato javascript window.location = '' , perché sarebbe la soluzione che potrebbe essere applicata nella maggior parte dei casi - non funziona. Ne risulta un Loop infinito non rilevato. Tuttavia, php header('Location: new.url') fa rompere il ciclo

linea di fondo: utilizzare solo 301s se si è assolutamente certi non si è mai intenzione di utilizzare ancora una volta che l'URL. Solitamente mai nella directory principale (esempio.com/)

7

Il problema principale con 301 è il browser che memorizzerà nella cache il reindirizzamento anche se si disabilita il reindirizzamento dal livello del server.

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