关于HTTP_X_FORWARDED_HOST

转载 2012年03月30日 15:06:05

今天在看Xweibo的源码,发现了用$_SERVER['HTTP_X_FORWARDED_HOST']来判断主机的地址,就目前来说很多人都是直接通过$_SERVER['HTTP_HOST']来判断的,但是通过代理的话就有问题了,请看下面的问题描述:

在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。

  1. php手册中的解释如下:  
  2. “HTTP_HOST”  
  3. 当前请求的 Host: 头信息的内容。  

一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量。

然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错。

最后找出原因:$_SERVER['HTTP_HOST']在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

究其原因,是因为,客户的公司通过一台服务器连接至因特网,而我们的程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。因此$_SERVER['HTTP_HOST']在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

在PHP手册中评论中也提到了这个:

Be careful with HTTP_HOST behind a proxy server.   Use these instead.
[HTTP_X_FORWARDED_FOR]
[HTTP_X_FORWARDED_HOST]
[HTTP_X_FORWARDED_SERVER]

In my situation, I used [HTTP_X_FORWARDED_SERVER] in place of [HTTP_HOST] in order get the machine and hostname (www.myurl.com)

最终解决方案:

 

$host    = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT']=='80' ? '' : ':'.$_SERVER['SERVER_PORT']));



 


 


apache反向代理tomcat时x-forwarded-for为null的问题

apache 在用ProxyPass时会自动在header中设置X-Forwarded-For X-Forwarded-Host和X-Forwarded-Server 如果tomcat后端不做设置,...
  • zwg_zero
  • zwg_zero
  • 2015年11月19日 13:20
  • 2981

HTTP 请求头中的 X-Forwarded-For

背景 通过名字就知道,X-Forwarded-For 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 ...
  • u013982161
  • u013982161
  • 2017年02月19日 21:20
  • 3116

PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解

uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了解,所以百度了一下,发现一篇帖子有点意思,转发过来做个记录。在php中,我...
  • fz04003
  • fz04003
  • 2011年01月04日 12:50
  • 28490

关于HTTP_X_FORWARDED_HOST

今天在看Xweibo的源码,发现了用$_SERVER['HTTP_X_FORWARDED_HOST']来判断主机的地址,就目前来说很多人都是直接通过$_SERVER['HTTP_HOST']来判断的,...
  • ypb455360299
  • ypb455360299
  • 2012年03月30日 15:06
  • 7442

挖掘x-forwarded-for注入

如何查找这种注入,以前一直也很困惑啊,如果我手工一个一个测试,如果被我遇到了真的是人品大爆发了。问过@小胖子他当时说是可遇不可求的。但是我也不是就这么信了。好了说真题。 xx年xx月xx日我浏览一个...
  • xing_anksh
  • xing_anksh
  • 2014年02月12日 09:55
  • 5663

NYOJ--关于521

NYOJ--关于521
  • jsjliuyun
  • jsjliuyun
  • 2014年03月24日 17:28
  • 1286

IOS - 关于我们页面

关于我们(静态显示信息)代码// // CYAboutUsViewController.h // SymptomChecker // // Created by wcl on 15/7/2. /...
  • u012515223
  • u012515223
  • 2015年07月21日 15:07
  • 1553

PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解,$_SERVER['HTTP_X_FORWARDED_HOST']

uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了解,所以百度了一下,发现一篇帖子有点意思,转发过来做个记录。 在ph...
  • wangdoudou1990
  • wangdoudou1990
  • 2014年06月09日 10:25
  • 581

Tomcat Access Log记录X-Forwarded-For

在实际使用中,使用F5或LVS为tomcat做负载均衡时,由于做了反向代理,tomcat记录的Aceess Log中,会将客户端ip记录为F5或lvs的ip,导致无法正常记录访问者的真实ip信息. T...
  • shuimuz_j
  • shuimuz_j
  • 2013年08月21日 23:16
  • 2533

通用的“关于本软件”对话框

我们知道,大多数软件都需要有一个“关于本软件”的对话框,用于告诉用户该软件的一些重要信息,最主要的是该软件的版本号。例如下图就是“锦书背单词”软件的“关于本软件”对话框:   现在...
  • u013948187
  • u013948187
  • 2015年07月27日 09:25
  • 633
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于HTTP_X_FORWARDED_HOST
举报原因:
原因补充:

(最多只允许输入30个字)