HTTP到HTTPS浏览器问题

时间:2017-06-19 18:58:13

标签: c# asp.net https response.redirect ihttpmodule

我几天来一直在搜索这个问题并做了很多研究,但我无法解决这个问题。

我试图控制我的网页,将它们重定向到http或https,无论我是否需要它。

我创建了一个attrubte来放在我需要在HTTPS中运行的每个页面

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://unpkg.com/region2d@1.0.0/plain/region2d.min.js"></script>

<div class="container">
    <div class="target1"></div>
    <div class="target2"></div>
</div>

然后我运行了一个HttpModule来检查每个页面。

[AttributeUsage(AttributeTargets.Class)]
public sealed class RequireSSL : Attribute { }

问题在于,当我重定向到相同的网址或任何其他网址时。浏览器拒绝从http切换到https,或者反过来导致重定向循环,浏览器将阻止这种情况发生。

我发现当我用www替换我的网址时,我的网站会运行得很好。或没有www。但我不能在我有test.dartsghent.be的子网站上使用它。

任何人都可以告诉我如何解决这个问题,请不要使用urlrewriter模块。

感谢任何帮助

注意:我没有使用MVC

以下是Chrome输出的示例。 enter image description here

正如您所看到的,页面会自动重定向。我使用RedirectPermanent(url)来https,但即使重定向被触发,它也不会移动到https,所以它一直在尝试。

3 个答案:

答案 0 :(得分:1)

假设这是ASP.NET MVC ......

此功能已通过System.Web.Mvc.RequireHttpsAttribute类存在于MVC v4中。

答案 1 :(得分:0)

您对www.blah...变量url进行了硬编码。

如果您想使用子域,则需要查询原始请求:

string url = requireSSL ? Uri.UriSchemeHttps : Uri.UriSchemeHttp +
             request.Host +
             request.AbsolutePath +
             request.Query;

这是我的头脑。检查生成的字符串并进行相应调整。

答案 2 :(得分:0)

我做了更多研究,发现问题出在我的重定向功能中。 当您重定向到同一个域时,它不会更改协议。所以我做的是检查域名,如果www。是在它前面,然后用www重定向到域。在它面前没有一个。

包含一个子域这会更难,所以我必须先重定向到另一个页面。否则浏览器会以循环结束。

对我来说似乎有点激烈,但这是我让它发挥作用的唯一方式。