Possible Duplicate:
HTTP_HOST vs. SERVER_NAME
What is the difference between $_SERVER['HTTP_HOST'] and $_SERVER['SERVER_NAME'] ??
$_SERVER['HTTP_HOST'] Returns the Host header from the current request. $_SERVER['HTTP_REFERER'] Returns the complete URL of the current page (not reliable because not all user-agents support it)
The HTTP_HOST is obtained from the HTTP request header and this is what the client actually used as "target host" of the request. The SERVER_NAME is defined in server config.
$_SERVER is an array containing information such as headers, paths, and script locations. The entries in this array are created by the web server.
$_SERVER['PHP_SELF'] Contains the file name of the currently running script. $_SERVER['GATEWAY_INTERFACE'] Contains the version of the Common Gateway Interface being used by the server.
$_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
The docs explain this well
'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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With