2012-09-15 10 views
7

rilevo nel PHP manual in cui si afferma quanto segue:Utilizzando URI relativi a protocollo all'interno di "Location:" intestazioni

HTTP/1.1 richiede un URI assoluto come argomento di »Località: compreso lo schema, hostname e percorso assoluto, ma alcuni client accettano gli URI relativi .

Per facilitare gli utenti con preferenza per una connessione HTTPS everywhere, sto pensando di cambiare le intestazioni nei miei script PHP da:

header("Location: http://www.example.com/"); a header("Location: //www.example.com/");

Ho testato il codice qui sopra per essere al lavoro su il mio browser Firefox, ma non sono sicuro che sia una cosa consigliabile da fare. O se devo estrarre il protocollo da $_SERVER variabile e metterlo in.

+1

possibile duplicato di [È un 302 reindirizzamento al relativo URL valido, o non valido?] (Http://stackoverflow.com/questions/8250259/is-a-302-redirect-to-relative-url-valid-or-invalid) – Raedwald

risposta

2

Come suggerito da HTTP protocol, è necessario utilizzare URI assoluto. È ancora possibile rilevare protocollo, utilizzando $_SERVER['HTTPS'] variabile, con una condizione come:

 
$protocol = "http" . (!empty($_SERVER['HTTPS']) ? "s" : ""); 
+1

Si noti che quando si utilizza ISAPI con IIS, il valore sarà "off" se la richiesta non è stata effettuata tramite HTTPS protocollo. (Lo stesso comportamento è stato segnalato per IIS7 che esegue PHP come applicazione Fast-CGI). – mikiqex

+1

Questo non funziona se l'app esegue HTTP e si trova dietro un proxy inverso che utilizza HTTPS. –

7

Il HTTPbis update permette URI relativi. Anche se non specificamente menzionato, questo include URL relativi al protocollo.

(E 'soprattutto un aggiornamento per il/1.1 spec HTTP che i documenti stabiliti il ​​comportamento del browser.)

+0

Questo è utile. Grazie. HTTP/1.1 è qui da molto tempo. Posso dire che tale comportamento è già applicato dalla maggior parte dei browser moderni? –

+1

Penso che sia abbastanza importante sottolineare che il documento a cui ti sei collegato è (anche ora) solo una bozza! Fino al settembre di quest'anno non sarà presentato all'IESG come corrispettivo. In ogni caso, ciò che è più importante per l'OP qui, penserei, non è quello che dice la specifica, ma come i browser si comportano nella realtà. –

Problemi correlati