Diversi tipi di risposta al browser si tradurrà in un reindirizzamento. Questi variano se influenzano le intestazioni HTTP o il contenuto HTML. Le tecniche utilizzate in genere dipendono dal ruolo della persona che lo implementa e dal loro accesso a diverse parti del sistema. Ad esempio, un autore Web senza controllo sulle intestazioni potrebbe utilizzare un meta tag di aggiornamento, mentre un amministratore di server Web che reindirizza tutte le pagine di un sito è più propenso a utilizzare la configurazione del server.,
Manuale redirectEdit
La tecnica più semplice è quello di chiedere al visitatore di seguire un link alla nuova pagina, di solito utilizzando un ancoraggio HTML:
Please follow <a href="http://www.example.com/">this link</a>.
Questo metodo è spesso utilizzato come un ripiego — se il browser non supporta il reindirizzamento automatico, il visitatore può ancora raggiungere l’obiettivo del documento seguendo il link.
Codici di stato HTTP 3xxEdit
Nel protocollo HTTP utilizzato dal World Wide Web, un reindirizzamento è una risposta con un codice di stato che inizia con 3 che fa sì che un browser visualizzi una pagina diversa., Se un client incontra un reindirizzamento, deve prendere una serie di decisioni su come gestire il reindirizzamento. Diversi codici di stato vengono utilizzati dai client per comprendere lo scopo del reindirizzamento, come gestire il caching e quale metodo di richiesta utilizzare per la richiesta successiva.
HTTP / 1.1 definisce diversi codici di stato per il reindirizzamento (RFC 7231):
- 300 scelte multiple (ad esempio offrono lingue diverse)
- 301 spostato permanentemente (reindirizza permanentemente da un URL all’altro passando link equity alla pagina reindirizzata)
- 302 trovato (originariamente “reindirizzamento temporaneo” in HTTP/1.,0 e comunemente usato per gli script CGI; sostituito da 303 e 307 in HTTP / 1.,i> 303 vedere le altre (le forze di una richiesta GET al nuovo URL, anche se la richiesta originale era POST)
- 307 temporary redirect (fornisce un nuovo URL per il browser per inviare una richiesta GET o POST)
- 308 redirect permanente (fornisce un nuovo URL per il browser per inviare una richiesta GET o POST)
Reindirizzare i codici di stato e characteristicsEdit
Codice di Stato HTTP | HTTP Versione | Temporanea / Permanente | Cacheable | Metodo di Richiesta Successiva Richiesta |
---|---|---|---|---|
301 | HTTP/1.,0 | Permanent | Yes | GET / POST may change |
302 | HTTP/1.0 | Temporary | not by default | GET / POST may change |
303 | HTTP/1.1 | Temporary | never | always GET |
307 | HTTP/1.1 | Temporary | not by default | may not change |
308 | HTTP/1.,1 | Permanente | default | non potrà cambiare |
Tutti questi codici di stato richiedono l’URL della pagina di destinazione del reindirizzamento da dare in Posizione: header della risposta HTTP. Le 300 scelte multiple di solito elencano tutte le scelte nel corpo del messaggio e mostrano la scelta predefinita nell’intestazione Location:.
(i codici di stato 304 non modificati e 305 use proxy non vengono reindirizzati).,
Esempio di risposta HTTP per un reindirizzamento 301edit
Una risposta HTTP con il reindirizzamento 301 “spostato permanentemente” è simile a questa:
Utilizzo dello scripting lato server per il reindirizzamentoedit
Gli autori Web che producono contenuti HTML di solito non possono creare reindirizzamenti utilizzando intestazioni HTTP poiché queste vengono generate automaticamente dal programma del server Web quando servono un file HTML. Lo stesso vale anche per i programmatori che scrivono script CGI, anche se alcuni server consentono agli script di aggiungere intestazioni personalizzate (ad esempio abilitando “intestazioni non analizzate”)., Molti server Web genereranno un codice di stato 3xx se uno script emette una riga di intestazione ” Location:”. Ad esempio, in PHP, si può usare la funzione “header”:
header('HTTP/1.1 301 Moved Permanently');header('Location: http://www.example.com/');exit();
Potrebbero essere necessarie altre intestazioni per impedire il caching. Il programmatore deve assicurarsi che le intestazioni siano emesse prima del corpo. Questo potrebbe non adattarsi facilmente al flusso naturale di controllo attraverso il codice. Per aiutare con questo, alcuni framework per la generazione di contenuti lato server possono tamponare i dati del corpo., Nel linguaggio di scripting ASP, questo può essere ottenuto anche usando response.buffer=true
e response.redirect "http://www.example.com/"
HTTP/1.1 consente un riferimento URI relativo o un riferimento URI assoluto. Se il riferimento URI è relativo, il client calcola il riferimento URI assoluto richiesto in base alle regole definite nella RFC 3986.
Apache HTTP Server mod_rewriteEdit
L’estensione Apache HTTP Server mod_alias può essere utilizzata per reindirizzare determinate richieste., Le direttive di configurazione tipiche sono:
Per una riscrittura e un reindirizzamento degli URL più flessibili, è possibile utilizzare Apache mod_rewrite. Ad esempio, per reindirizzare una richiesta a un nome di dominio canonico:
RewriteEngine onRewriteCond %{HTTP_HOST} ^(+\.)*oldsite\.example\.com\.?(:*)?$ RewriteRule ^(.*)$ http://newsite.example.net/$1
Tale configurazione può essere applicata a uno o tutti i siti sul server attraverso i file di configurazione del server o ad una singola directory di contenuti attraverso un file .htaccess
.,
nginx rewriteEdit
Nginx ha un modulo di riscrittura http integrato, che può essere utilizzato per eseguire l’elaborazione avanzata degli URL e persino la generazione di pagine Web (con la direttiva return). Un esempio di tale uso avanzato del modulo di riscrittura è mdoc.su, che implementa un servizio di accorciamento URL deterministico interamente con l’aiuto del solo linguaggio di configurazione nginx.
Ad esempio, se una richiesta per /DragonFlyBSD/HAMMER.5 dovesse arrivare, sarebbe prima reindirizzato internamente a / d / HAMMER.,5 con il primo riscrivere la direttiva di seguito (solo che influenzano lo stato interno, senza alcuna HTTP risposte rilasciato al cliente appena ancora), e poi con la seconda riscrivere la direttiva, una risposta HTTP con un 302 Found codice di stato potrebbero essere emesse al cliente di reindirizzare l’esterno script cgi di web-uomo:
Meta tag Refresh e HTTP aggiornamento headerEdit
Netscape ha introdotto la meta funzionalità di aggiornamento che aggiorna una pagina dopo un certo periodo di tempo. Questo può specificare un nuovo URL per sostituire una pagina con un’altra. Questo è supportato dalla maggior parte dei browser web., Un timeout di zero secondi effettua un reindirizzamento immediato. Questo è trattato come un reindirizzamento permanente 301 da parte di Google, consentendo il trasferimento del PageRank alla pagina di destinazione.
Questo è un esempio di un semplice documento HTML che utilizza questa tecnica:
Questa tecnica può essere utilizzata dagli autori web perché il meta tag è contenuto all’interno del documento stesso. Il meta tag deve essere inserito nella sezione” head ” del file HTML. Il numero ” 0 ” in questo esempio può essere sostituito da un altro numero per ottenere un ritardo di molti secondi., L’ancora nella sezione “corpo” è per gli utenti i cui browser non supportano questa funzione.
Lo stesso effetto può essere ottenuto con un HTTP refresh
header:
Questa risposta è più facile da generare dai programmi CGI perché non è necessario modificare il codice di stato predefinito.
Ecco un semplice programma CGI che effettua questo reindirizzamento:
Nota: Di solito, il server HTTP aggiunge automaticamente la riga di stato e l’intestazione Content-Length.,
Il W3C scoraggia l’uso del meta refresh, poiché non comunica alcuna informazione sulla risorsa originale o nuova, al browser (o al motore di ricerca). Le linee guida per l’accessibilità dei contenuti Web del W3C (7.4) scoraggiano la creazione di pagine di aggiornamento automatico, poiché la maggior parte dei browser Web non consente all’utente di disabilitare o controllare la frequenza di aggiornamento. Alcuni articoli che hanno scritto sulla questione includono W3C Web Content Accessibility Guidelines (1.0): Garantire il controllo dell’utente delle modifiche ai contenuti sensibili al tempo, Utilizzare reindirizzamenti standard: non rompere il pulsante indietro!, e tecniche di base per le linee guida sull’accessibilità dei contenuti Web 1.0 sezione 7.
JavaScript redirectedit
JavaScript può causare un reindirizzamento impostando l’attributowindow.location
, ad esempio:
window.location='http://www.example.com/'
Normalmente JavaScript spinge l’URL del sito redirector nella cronologia del browser. Può causare loop di reindirizzamento quando gli utenti premono il pulsante indietro. Con il seguente comando è possibile prevenire questo tipo di comportamento.,
window.location.replace('http://www.example.com/')
Tuttavia, le intestazioni HTTP o il meta tag refresh possono essere preferiti per motivi di sicurezza e perché JavaScript non verrà eseguito da alcuni browser e molti web crawler.
Telaio redirectsEdit
Un effetto leggermente diverso può essere ottenuto mediante la creazione di un frame inline:
<iframe height="100%" width="100%" src="http://www.example.com/">Please follow <a href="http://www.example.com/">link</a>.</iframe>
la differenza principale al di sopra di reindirizzare metodi è che per un telaio di reindirizzare il browser visualizza l’URL del documento di frame e non l’URL della pagina di destinazione nella barra dell’URL., Questa tecnica di occultamento può essere utilizzata in modo che il lettore veda un URL più memorabile o per nascondere fraudolentemente un sito di phishing come parte dello spoofing del sito web.
Prima di HTML5, lo stesso effetto potrebbe essere fatto con un frame HTML che contiene la pagina di destinazione:
Redirect chainsEdit
Un reindirizzamento può portare a un altro. Ad esempio, l’URL “http://wikipedia.com” (con “*.com” come dominio) viene prima reindirizzato a https://www.wikipedia.org/ (con nome di dominio in .org), dove è possibile navigare al sito specifico della lingua., Ciò è inevitabile se i diversi collegamenti nella catena sono serviti da server diversi, anche se dovrebbe essere ridotto al minimo riscrivendo l’URL il più possibile sul server prima di restituirlo al browser come reindirizzamento.
Wikipedia ha reindirizzato le sue pagine a HTTPS per impostazione predefinita dal 2015.
Redirect loopsEdit
A volte un errore può far sì che una pagina finisca per reindirizzare a se stessa, possibilmente tramite altre pagine, portando a una sequenza infinita di reindirizzamenti. I browser dovrebbero smettere di reindirizzare dopo un certo numero di salti e visualizzare un messaggio di errore.
HTTP / 1.,1 Stati standard:
Un client DOVREBBE rilevare e intervenire in reindirizzamenti ciclici (cioè, cicli di reindirizzamento “infiniti”).
Nota: una versione precedente di questa specifica raccomandava un massimo di cinque reindirizzamenti (, Sezione 10.3). Gli sviluppatori di contenuti devono essere consapevoli del fatto che alcuni client potrebbero implementare tale limitazione fissa.