2010-11-04 20 views
9

He escrito un script PHP que me gustaría usar en varios dominios en el mismo servidor (apuntando al mismo script). Quiero agregar funcionalidad al script para poder averiguar con qué dominio está trabajando el script en cualquier momento. HTTP_HOST se puede utilizar para encontrar el dominio, sin embargo, he leído que no es confiable, especialmente con navegadores más antiguos. Mi comprensión es que la mayoría de los servidores Apache usan hosts virtuales que usan el mismo método de todos modos, así que si no es un problema con los proveedores de hosting, no debería ser un problema con mi código.¿Qué tan confiable es HTTP_HOST?

¿Alguien puede verificar esto y aclarar la confusión?

Respuesta

10

HTTP_HOST es para la cabecera Host: enviado por HTTP 1.1 user-agents durante la solicitud. Esto no lo utilizan los clientes de HTTP 1.0, por lo que no aparecerá entonces. Sin embargo, hoy en día, no creo que aún haya muchos clientes HTTP 1.0.

+1

+1, no tenía conocimiento de esto. –

+0

E incluso la mayoría de los clientes HTTP 1.0 se han extendido al uso de este campo ahora; solo el HTTP 1.0 anterior no actualizado no lo proporciona. – Konerak

+2

@Pekka no es un gran problema. Tal cliente imaginario no podrá acceder a la mayoría de los sitios (llamados servidores virtuales basados ​​en host), por lo tanto, es impracticable. –

8

Editar: mi error: el encabezado de host no está presente en HTTP 1.0 peticiones. Ver la respuesta de @ Bruno. Dejando el mío en su lugar debido a las consideraciones de seguridad

Los únicos problemas con HTTP_HOST que conozco son problemas de seguridad, no de compatibilidad.

Los problemas de seguridad provienen del hecho de que HTTP_HOST es enviado por el usuario. Si el servidor web está configurado incorrectamente y/o tiene errores, los valores arbitrarios HTTP_HOST podrían llegar a su sitio/script (ver, por ejemplo, here para una discusión detallada). Su aplicación debe estar preparada para eso.

Es bueno no confiar en HTTP_HOST (por ejemplo, puede ser una buena idea establecer un conjunto de valores permitidos para que antes de procesarlo en su script PHP):

<?php 
    $allowed_hosts = array("domain1.com", "domain2.com", "domain3.com"); 

    if (!in_array(strtolower($_SERVER["HTTP_HOST"]), $allowed_hosts)) 
    die ("Unknown host name ". $_SERVER["HTTP_HOST"]); 
+1

+1 para su respuesta también, aunque no se trata de una compatibilidad de navegador más antigua, definitivamente está en el tema de "¿Qué tan confiable es HTTP_HOST?" – Bruno

+0

@Pekka Eso es lo que pretendo hacer. Esto también trae otra pregunta En mi opinión, sería mejor permitir que Apache resolviera esto y usar HTTP_SERVER el alias del servidor. El único problema que tengo con esto es hacer que host.conf sea dinámico. –

+0

@andicrook que funcionaría, pero tendrías que configurar un vhost para cada nombre de dominio concebible. Pero teniendo en cuenta que necesitarás introducir todos los nombres de dominio en httpd.conf de todos modos ... –

1

La respuesta de Pekka parece más interesante, pero parece que quiere saber qué navegadores son compatibles con http 1.1 y cuáles no. Se encontró esto en google: http://www.1-script.com/forums/Browser-Support-for-HTTP-1-1-article34982--8.htm

Una nota, de ese hilo: "un navegador HTTP 1.0 no puede llegar al host virtual no predeterminado". Eso significa que un navegador que no admite http 1.1 no puede llegar a ningún sitio web en un servidor compartido, hasta donde yo sé. Son muchos sitios web en hosts compartidos. También subdominios podría (sin seguro sin embargo) ser "detectado' de la misma manera, mediante el uso de la HTTP_HOST var.

Después de leer estos, i realmente no creo que nadie utiliza un navegador que viejos Hoy en día, sería imposible para ellos en realidad navegar por la web :)

+0

, hay todavía muchos teléfonos móviles que usan HTTP/1.0 – stillstanding

+0

¿tiene uno? Soy curioso si no pueden acceder a los subdominios. – Quamis

+0

Sí Apache utiliza HTTP_HOST para la mayoría de los hosts virtuales, si su alojamiento basado en IP puede usar la búsqueda inversa de DNS que crearía gastos generales de todos modos –

0

esto es lo que se contesta en un similar question:


Mirando en esto mismo para otros fines:

"HTTP/1.0 está en uso por proxies, algunos clientes móviles e IE cuando configurado para usar un proxy. Por lo tanto, 1.0 parece representar un trivial% de tráfico que no es en general. ... Sí, todavía hay muchos clientes 1.0."

Fuente (julio de 2009): http://groups.google.com/group/erlang-programming/msg/08f6b72d5156ef74

:-(


personalmente estoy recibiendo un buen número de HTTP/1.0 peticiones en mis sitios con una falta HTTP_HOST :-(

Cuestiones relacionadas