【问题标题】:Request.Url.GetLeftPart(UriPartial.Authority) returns http on https siteRequest.Url.GetLeftPart(UriPartial.Authority) 在 https 站点上返回 http
【发布时间】:2014-07-23 09:44:41
【问题描述】:

我们使用Request.Url.GetLeftPart(UriPartial.Authority) 来获取网站的域部分。这满足了我们对 http 的要求。 我们最近将站点更改为 https(大约 3 天前),但这仍然返回 http://.. 网址全部改为https,并显示在浏览器地址栏中。

知道为什么会这样吗?

【问题讨论】:

  • 如果想获取域名然后使用这个 Environment.UserDomainName
  • 我想要这里的协议和域/端口,而不仅仅是域名。

标签: c# http https httpcontext


【解决方案1】:

在处理负载平衡器时也会发生这种情况。在我处理的一种情况下,负载均衡器将任何 https 请求转换为 http。它仍然在浏览器地址栏中显示 https,但在内部它是一个 http 请求,因此您对 GetLeftPart() 进行的服务器端调用返回 http。

【讨论】:

    【解决方案2】:

    如果您的请求来自带有 SSL 卸载的 ARR, Request.Url.GetLeftPart(UriPartial.Authority) 获取http

    【讨论】:

      【解决方案3】:

      以下示例运行良好,并返回带有“https”的字符串:

      var uri = new Uri("https://www.google.com/?q=102njgn24gk24ng2k");
      var authority = uri.GetLeftPart(UriPartial.Authority);
      // authority => "https://www.google.com"
      

      您要么在这里遇到HttpContext 类的问题,要么您的所有请求仍在使用http

      1. 您可以检查请求HttpContext.Current.Request.IsSecureConnection 属性。如果它是真的,并且GetLeftPart 方法仍然为你返回 http,我想你不会绕过这里的替换。
      2. 如果您的所有请求确实都来自 http,您可能会在 IIS 中强制实施安全连接。

      您还应该检查传入的 URL 并将其记录在某个地方以进行调试。

      【讨论】:

      • 你的第二点是问题!他们在 DNS 级别绑定了 SSL(我对此一无所知)。 IIS 只打开了 80 端口,所以它仍然是 http。
      猜你喜欢
      • 2016-12-16
      • 2017-06-06
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多