lnmp下$_SERVER["HTTP_HOST"] 更稳定

admin 2015年05月20日 LAMP配置 993次阅读 查看评论

  最近在开发站群软件,用到了根据访问域名判断子站点的相关问题。PHP获取当前域名有两个变量 HTTP_HOST 和 SERVER_NAME,我想知道两者的区别以及哪个更加可靠。

  首先我想说,百度上那些转来转去的文章都是扯淡!

  有说相同的,有说不同的,都没说明原因,没经过验证就互相转来转去的,浪费观众时间。

  下面说说本人经过亲自验证 + 查阅官方文档 + 官方BUG列表 + 官方邮件列表 + sitepoint + webmasterworld + google的总结:

  相同点:

  当满足以下三个条件时,两者会输出相同信息。

  1. 服务器为80端口

  2. apache的conf中ServerName设置正确

  3. HTTP/1.1协议规范

  不同点:

  1. 通常情况:

  $_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。

  $_SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。

  2. 当服务器为非80端口时:

  $_SERVER["HTTP_HOST"] 会输出端口号,例如:0769.US:8080

  $_SERVER["SERVER_NAME"] 会直接输出ServerName值

  因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT

  3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:

  httpd.conf配置如下:

  <virtualhost *>

  ServerName mimiz.cn

  ServerAlias www.0769.us

  </virtualhost>

  客户端访问域名www.0769.us

  $_SERVER["HTTP_HOST"] 输出 www.0769.us

  $_SERVER["SERVER_NAME"] 输出 0769.us

  所以,在实际程序中,应尽量使用$_SERVER["HTTP_HOST"] ,比较保险和可靠。


实际测试中Nginx下 $_SERVER["HTTP_HOST"]更好用!!


$_SERVER["SERVER_NAME"] 默认为localhost

« 上一篇 下一篇 » admin原创文章,转载请注明出处! 标签:lnmp下$_SERVER["HTTP_HOST"] 更稳定

相关日志:

«   2020年11月   »
1
2345678
9101112131415
16171819202122
23242526272829
30
控制面板
您好,欢迎到访网站!
  [查看权限]
网站分类
文章归档
网站收藏
友情链接
图标汇集
  • 又拍云
  • 订阅ipvb的RSS 2.0聚合