2012-09-15 27 views
7

observo en el PHP manual que establece lo siguiente:El uso de URIs relativas al protocolo dentro "Ubicación:" encabezados

HTTP/1.1 requiere una URI absoluta como argumento para »Ubicación: incluyendo el esquema, nombre de host y ruta absoluta, pero algunos clientes aceptan URI relativos.

A fin de facilitar a los usuarios con preferencia por una conexión HTTPS everywhere, estoy pensando en cambiar los encabezados en mis scripts PHP a partir de:

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

He probado el código anterior para estar trabajando en mi navegador Firefox, pero no estoy seguro de si es aconsejable hacerlo. O si debería extraer el protocolo de $_SERVER variable y ponerlo en.

+1

posible duplicado de [Es una redirección 302 a URL relativa válida o inválida?] (Http://stackoverflow.com/questions/8250259/is-a-302-redirect-to-relative-url-valid-or-invalid) – Raedwald

Respuesta

2

Según lo sugerido por HTTP protocol, se debe utilizar URI absoluto. Todavía se puede detectar protocolo, mediante el uso de $_SERVER['HTTPS'] variables, con una condición como:

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

Tenga en cuenta que al usar ISAPI con IIS, el valor será "off" si la solicitud no se realizó a través de HTTPS protocolo. (Se informó el mismo comportamiento para IIS7 que ejecuta PHP como una aplicación Fast-CGI). – mikiqex

+1

Esto no funcionará si su aplicación ejecuta HTTP y está detrás de un proxy inverso que usa HTTPS. –

7

El HTTPbis update permite URIs relativas. Aunque no se menciona específicamente, esto incluye URL relativas al protocolo.

(Es ante todo una actualización de los protocolos HTTP/1.1 especificación de que los documentos establecidos comportamiento del navegador.)

+0

Esto es útil. Gracias. HTTP/1.1 ha estado aquí durante mucho tiempo. ¿Puedo decir que tal comportamiento ya es aplicado por la mayoría de los navegadores modernos? –

+1

Creo que es muy importante señalar que el documento al que ha vinculado es (incluso ahora) solo un borrador. No se presentará al IESG para su consideración como estándar hasta septiembre de este año. En cualquier caso, lo que es más importante para OP aquí, creo, no es lo que dice la especificación, sino cómo se comportan los navegadores en realidad. –

Cuestiones relacionadas