Esempi di 302 vs 303


Risposte:


35

La descrizione sulla pagina a cui ti sei collegato sembra essere abbastanza descrittiva del loro scopo previsto:

Un reindirizzamento 302 indica che il reindirizzamento è temporaneo : i client dovrebbero ricontrollare l'URL originale nelle richieste future.

Un reindirizzamento 303 ha lo scopo di reindirizzare una POSTrichiesta a una GETrisorsa (in caso contrario, il client presuppone che il metodo di richiesta per la nuova posizione sia lo stesso della risorsa originale).

Se stai reindirizzando un client come parte della tua applicazione web ma ti aspetti che vengano sempre avviati dall'applicazione Web (ad esempio un accorciatore di URL), un reindirizzamento 302 sembra avere senso. Un reindirizzamento 303 viene utilizzato quando si ricevono POSTdati da un client (ad esempio, un modulo inoltrato) e si desidera reindirizzarli a una nuova pagina Web da recuperare utilizzando GETanziché POST(ad esempio, una richiesta di pagina standard).

Ma vedi questa nota dalle definizioni del codice di stato: la maggior parte dei client farà la stessa cosa per 302 o 303:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.

4
Chiaro ma sbagliato. Un reindirizzamento 303 non è permanente. L'RFC afferma "La risposta 303 NON DEVE essere memorizzata nella cache" . La descrizione che hai fornito qui corrisponde a un reindirizzamento 301.
Ladadadada,

2
Colpa mia. Avevo 301 e 303 al contrario. Ho aggiornato la risposta.
Larks

ora ce ne sono 308
Miranda,

Penso che sia un po 'fuorviante suggerire che 303 è "inteso" per reindirizzare un POST a un GET - punto e basta. Le specifiche suggeriscono che 303 riguarda maggiormente la disponibilità di una rappresentazione di una risorsa tramite il metodo richiesto originariamente. Se, ad esempio, ho un'immagine protetta con diritti di grandi dimensioni disponibile solo per utenti autenticati, potrei usare un 303 per reindirizzare gli utenti non autenticati su un'immagine più piccola. Il metodo di richiesta utilizzato in tal caso è irrilevante.
beaudet

La RFC dice "Questo metodo esiste principalmente per consentire all'output di uno script attivato POST di reindirizzare l'agente utente su una risorsa selezionata." e "La risposta alla richiesta può essere trovata sotto un URI diverso e DOVREBBE essere recuperata utilizzando un metodo GET su quella risorsa". Penso che corrisponda più o meno a quello che ho detto (tanti anni fa), ma sono sicuro che ci sia spazio per l'interpretazione.
Larsks

15

Esistono quattro diversi tipi di reindirizzamento (attualmente). Inizialmente c'erano solo due, ma la maggior parte dei client ha implementato il reindirizzamento 302 in modo errato, quindi ne sono stati aggiunti altri due per chiarire la differenza tra i due diversi comportamenti possibili alla ricezione di un 302.

L'RFC che hai collegato lo afferma nella sezione su 302 reindirizzamenti:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
  1. Un reindirizzamento 301 è un reindirizzamento permanente. È memorizzabile nella cache e tutti i segnalibri per questo URL devono essere aggiornati per puntare al nuovo URL.
  2. Un reindirizzamento 302 è un reindirizzamento temporaneo. Non è memorizzabile nella cache per impostazione predefinita e deve essere richiesto nuovamente ogni volta (ma è possibile sostituirlo con le intestazioni della cache). La richiesta di follow-up dovrebbe usare lo stesso metodo (POST, GET, CONNECT, PUT, DELETE, ecc.) Della richiesta originale e per qualsiasi cosa diversa dalle richieste GET e HEAD, il client dovrebbe richiedere all'utente prima di effettuare la richiesta. Questa è la parte in cui i client hanno sbagliato e la maggior parte di loro cambia il metodo per la richiesta di follow-up in GET, indipendentemente dal metodo originale.
  3. Un reindirizzamento 303 è uguale a un 302, tranne per il fatto che la richiesta di follow-up è ora esplicitamente cambiata in una richiesta GET e non è richiesta alcuna conferma.
  4. Un reindirizzamento 307 è uguale a un 302, tranne per il fatto che la richiesta di follow-up è ora esplicitamente la stessa della richiesta originale e la conferma deve essere acquisita dall'utente per metodi di richiesta diversi da GET e HEAD.

I client più vecchi potrebbero non comprendere il reindirizzamento 303. Tutto ciò che effettua una richiesta HTTP / 1.1 dovrebbe comprendere una risposta 303.

È possibile considerare 300 e 305 risposte come reindirizzamenti, nel senso che esistono sei tipi diversi.


0

I tipi di reindirizzamento (301.302.303 ...) utilizzati hanno un grande impatto sul modo in cui i motori di ricerca indicizzeranno e classificheranno i contenuti. Alcuni ragni potrebbero persino rifiutare di indicizzare il contenuto reindirizzato temporaneamente. I dettagli sono disponibili in varie pubblicazioni SEO ...

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.