关于HTTP_X_FORWARDED_HOST
来源:互联网 发布:单片机几个p口的区别 编辑:程序博客网 时间:2024/06/05 14:51
今天在看Xweibo的源码,发现了用$_SERVER['HTTP_X_FORWARDED_HOST']来判断主机的地址,就目前来说很多人都是直接通过$_SERVER['HTTP_HOST']来判断的,但是通过代理的话就有问题了,请看下面的问题描述:
在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。
- php手册中的解释如下:
- “HTTP_HOST”
- 当前请求的 Host: 头信息的内容。
一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量。
然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错。
最后找出原因:$_SERVER['HTTP_HOST']在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。
究其原因,是因为,客户的公司通过一台服务器连接至因特网,而我们的程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。因此$_SERVER['HTTP_HOST']在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。
来源:http://stephenjqj.iteye.com/blog/429879
在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)
来源:
http://www.php.net/manual/zh/reserved.variables.php#65190
在http://pinds.com/2005/12/05/what-s-with-http_x_forwarded_host/中也关于HTTP_X_FORWARDED_HOST的讨论
最终解决方案:
$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']));
- 关于HTTP_X_FORWARDED_HOST
- 关于HTTP_X_FORWARDED_HOST
- PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解,$_SERVER['HTTP_X_FORWARDED_HOST']
- PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解,$_SERVER['HTTP_X_FORWARDED_HOST']
- 关于
- 关于
- 关于++,--
- 关于#
- 关于。。。
- 关于
- 关于......
- 关于
- 关于
- 关于****
- 关于
- 关于!
- 关于++
- 关于
- 创建httpRequest对象
- php判断wap客户端(手机用户)
- Linux 对拷命令scp
- android性能测试工具之dumpsys
- C++ primer第二次阅读学习笔记(第10章:关联容器)
- 关于HTTP_X_FORWARDED_HOST
- 框架frameset用法
- 在Centos中安装CMake
- Java多态,Java多态的深入学习
- Android 内存分析工具 MAT(Memory Analyzer Tool)(转)
- 在Centos liunx中安装ncurses
- hdu 2222 Keywords Search
- Centos Linux用sysstat包安装iostat,mpstat,sar等命令
- Android中的android:layout_width和android:width