为什么 HttpContext.Request.Url 和 Request.ServerVariables[“HTTP_HOST”] 返回不同的值
我有 3 个网站,它们通过负载平衡的服务器池运行。负载均衡器使用粘性会话来确保会话保留在初始池中。
在网站中,我需要生成一个特定于该网站的网址。按照标准程序,我尝试使用 HttpContext.Request.Url,但这返回错误的 url。然后我尝试使用 Request.ServerVariables["HTTP_HOST"] 并返回正确的网址。
有人有什么想法吗?
现场A: Request.Url 返回 Url A Request.ServerVariables["HTTP_HOST"] 返回 Url A
在站点 B 上:
Request.Url 返回 Url A Request.ServerVariables["HTTP_HOST"] 返回 Url B
在站点 C 上:
Request.Url 返回 Url A Request.ServerVariables["HTTP_HOST"] 返回 Url C
I have 3 websites that run from a load-balanced pool of servers. Load-balancer uses sticky sessions to ensure that session stays on initial pool.
In the website, I need to generate a url specific to the website. As per standard procedure I tried to use HttpContext.Request.Url, but this returns the wrong url. I then tried to use Request.ServerVariables["HTTP_HOST"] and that returns the correct url.
Does anyone have any ideas?
On Site A:
Request.Url returns Url A
Request.ServerVariables["HTTP_HOST"] returns Url A
On Site B:
Request.Url returns Url A
Request.ServerVariables["HTTP_HOST"] returns Url B
On Site C:
Request.Url returns Url A
Request.ServerVariables["HTTP_HOST"] returns Url C
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Request.ServerVariables["HTTP_HOST"]
返回 IIS 主机,即您的网站设置为响应的主机名。该主机可能与为访问您的页面而执行的 URL 客户端中的主机相同,也可能不同。您看到的行为完全符合逻辑,因为客户端始终执行相同的 URL,但负载均衡器将其发送到不同的 IIS 实例。编辑:关于这一点,我很困惑为什么你需要“特定于网站的网址”?
Request.ServerVariables["HTTP_HOST"]
return IIS host, i.e. the host name your website is set to respond to. That may or may not be the same host as in URL client executed to get to your page. The behavior you see is totally logical since client always executes the same URL, but the load balancer send it to different IIS instances.edit: on that note I am confused as to why would you need to have "a url specific to the website"?