Possible Duplicate:
HTTP_HOST vs. SERVER_NAME
What is the difference between $_SERVER['HTTP_HOST']
and $_SERVER['SERVER_NAME']
??
Possible Duplicate:
HTTP_HOST vs. SERVER_NAME
What is the difference between $_SERVER['HTTP_HOST']
and $_SERVER['SERVER_NAME']
??
$_SERVER['SERVER_NAME']
gives the value of the server name as defined in host configuration (i.e for Apache the Apache .conf
file).
$_SERVER['HTTP_HOST']
gives you the domain name through which the current request is being fulfilled and is more directly related to the request.
HTTP_HOST
is typically more useful in most applications in that it relates directly to the request, whereas SERVER_NAME
could return whatever value is in the conf file and doesn't tell you anything about the request at all.
I will give you an example of how HTTP_HOST
might differ from SERVER_NAME
. Say you have an host defined in Apache with ServerName of example.com
and an IP address of 1.2.3.4
.
Let's look at two incoming request URLs and show the difference between these variables:
http://www.example.com
HTTP_HOST = www.example.com
SERVER_NAME = example.com
http://1.2.3.4
HTTP_HOST = 1.2.3.4
SERVER_NAME = example.com
So again, HTTP_HOST is tied more to the request, whereas SERVER_NAME is determined by server configuration.
HTTP_HOST
is the Host:
header sent by the client. As a result, it might be a little less trustworthy. SERVER_NAME
is determined by your server's configuration, regardless of user input.
The difference in behavior is subtle. Some good examples are demonstrated here: http://shiflett.org/blog/2006/mar/server-name-versus-http-host
'SERVER_NAME' The name of the server host under which the current script is executing. If the script is running on a virtual host, this will be the value defined for that virtual host.
'HTTP_HOST' Contents of the Host: header from the current request, if there is one.
HTTP_HOST
Contents of the Host: header from the current request, if there is one.
SERVER_NAME
The name of the server host under which the current script is executing. If the script is running on a virtual host, this will be the value defined for that virtual host.