PHP中SERVER_NAME和HTTP_HOST的区别

PHP 的 $_SERVER 中有两个元素,SERVER_NAME 和 HTTP_HOST,这两元素的值有时候是相同的,而有时候又是不相同的,那么它们的区别是什么呢?

从字面来理解,SERVER_NAME 是服务器的名称,而 HTTP_HOST 是 HTTP HOST。

事实上的确也是这样,SERVER_NAME 是服务器的名字,它是由 apache、nginx 等服务器软件的配置来决定的。

apache 用 ServerName 来指定 SERVER_NAME,例如 ServerName www.zhetenga.com。

nginx 则用 server_name 来指定 SERVER_NAME,例如 server_name www.zhetenga.com。

需要注意的是如果指定了多个域名作为 server_name,nginx 总以第一个为准,很多人不知道然后在多域名网站中就会遇坑。

而 HTTP_HOST 则来自于 HTTP 协议中的 HTTP 头中的 HOST,它是由客户端发起请求的时候决定的。

这意味着,如果配置的名称和客户端请求的参数是一致的话,它们的值才会相同,否则就是不同的。

例如 server_name 设置了 zhetenga.com,浏览器访问时用的是 www.zhetenga.com,这个时候 SERVER_NAME 是 zhetenga.com,HTTP_HOST 是 www.zhetenga.com。

2015年09月26日