$ _SERVER ['HTTP_HOST']未设置

dyn*_*mic 7 php apache

我的php页面流量很大但没有变量$_SERVER['HTTP_HOST']集.

此流量类似于每秒1次点击.我不知道它可能是什么,但为了减少服务器负载,我在每个php页面的顶部执行此操作:

if (!isset($_SERVER['HTTP_HOST']))
    exit;
Run Code Online (Sandbox Code Playgroud)

你知道是什么原因引起的吗?HTTP_HOST没有设置时退出是否安全?

普通用户可以不设置访问我的页面HTTP_HOST吗?

  • PHP版本:5.2.0-8
  • Apache:2.2.3

reg*_*ero 6

嗯,可能也是"apache虚拟连接".检查您是否访问"内部虚拟连接"的日志,主apache进程使用这些命令将命令发送到他的子进程(如自己自杀,或者我们需要重新加载conf).这些连接是在HTTP/1.0中进行的,没有HOST设置.

http://wiki.apache.org/httpd/InternalDummyConnection

这些#$!"#sh#f#ck*$!连接在那里制造了很多错误,(缓存,没有HTTP/1.1等).一个'简单'的解决方案是没有基于主机名的Virtuahost为你服务主应用程序作为默认虚拟主机.使用'it works'页面保留一个非常简单的默认虚拟主机,或者非常简单的"如果你得到这个页面,你可能会尝试在某处获得支持HTTP/1.1的浏览器",作为一个静态页面然后,所有HTTP/1.0流量或仅通过IP访问您的服务器的人将不在您的实际应用程序中.

为了完整,我今年看到一家公司使用不良代理从所有传出的HTTP流量中删除Host头.但这些坏人是愚蠢的,我不认为有很多人仍然在没有主机的情况下浏览HTTP/1.0.


Pek*_*ica 5

HTTP_HOST是客户端 HTTP 请求的一部分,并指定请求将定向到哪个主机名。在多站点设置中区分正确的站点是必要的。

如果HTTP_HOST未设置,则客户端要么非常非常旧(HTTP 1.0 不支持 HTTP_HOST),要么直接向您网站的 IP 发出请求。

我看不出像你那样阻止有什么坏处。但是,如果您担心流量,在 Web 服务器级别解决此问题可能更明智。

  • 这可能也是区分它们的好方法。但是 HTTP 1.0 支持 `Host:` 标头,并且许多 1.0 客户端实际上会发送它。只是为了符合 HTTP 1.1,它被*强制*,http://stackoverflow.com/questions/4032412/why-do-wget-has-host-header-in-its-http-request (3认同)