构造自引用URL的最可靠,通用的方法是什么?换句话说,我想生成用户浏览器所击中的URL的http://www.site.com[:port]部分.我正在使用在Apache下运行的PHP.
一些并发症:
>依靠$_SERVER [“ HTTP_HOST”]是危险的,因为这似乎直接来自HTTP Host标头,有人可以伪造该标头.
>可能有或没有虚拟主机.
>可能使用Apache的Port指令指定了一个端口,但是如果它位于负载均衡器或代理之后,则可能不是用户指定的端口.
>端口实际上可能不是URL的一部分.例如,通常省略80和443.
> PHP的$_SERVER [“ HTTPS”]并不总是提供可靠的值,尤其是在负载均衡器或代理后面的情况下.
> Apache具有UseCanonicalName指令,该指令会影响SERVER_NAME和SERVER_PORT环境变量的值.如果可以的话,我们可以假设它已打开.
解决方法:
最可靠的方法是自己提供.
该站点应该被编码为主机名无关,但是要知道一个特殊的配置文件.该文件不属于代码库的源代码管理,因为它属于Web服务器的配置.该文件用于设置主机名和其他特定于Web服务器的参数.您可以适应负载平衡器,更改端口等,因为您是说如果HTTP请求命中了该代码,那么它可以假设您承担了多少.
顺便说一句,这个技巧也有助于发展.