HTTP到HTTPS浏览器问题
我一直在寻找关于这个问题几天,并做了大量的研究,但我无法弄清楚这一点。HTTP到HTTPS浏览器问题
我想控制我的网页重定向到http或https,无论我需要或不。
我创建了一个attrubte把每一页,我需要在HTTPS
[AttributeUsage(AttributeTargets.Class)]
public sealed class RequireSSL : Attribute { }
运行上方。然后我有一个HTTP模块运行检查要求每一页。
public class DartsGhentPipeline : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += Context_PreRequestHandlerExecute;
}
private void Context_PreRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpRequest request = application.Request;
HttpResponse response = application.Response;
Page page = application.Context.CurrentHandler as Page;
if (page == null)
return;
bool requireSSL = page.GetType().GetCustomAttributes(typeof(RequireSSL), true).Length > 0;
bool isSecureConnection = request.IsSecureConnection;
string url = string.Format("{0}://www.dartsghent.be{1}", requireSSL ? Uri.UriSchemeHttps : Uri.UriSchemeHttp, HttpContext.Current.Request.RawUrl);
if (requireSSL != isSecureConnection)
response.RedirectPermanent(url);
}
public void Dispose() { }
}
这里的问题是,当我重定向到相同的网址或任何其他。浏览器拒绝从http切换到https或其他方式导致重定向循环,浏览器将阻止这种情况发生。
我发现我的网站运行完美时,我用www替换我的网址。或没有www。但我不能使用此subwebsite我有test.dartsghent.be
任何人都可以告诉我如何解决这个问题,请没有urlrewriter模块pls。
任何帮助表示赞赏
注:我没有使用MVC
正如你所看到的页面不断重定向本身。我使用RedirectPermanent(url)来https,但即使重定向被触发,它也不会移动到https,因此它一直在尝试。
我做了更多的研究,发现问题出在我的重定向功能。 当你重定向到相同的域,那么它不会改变协议。所以我做的是检查域如果www。是否在前面,然后通过www重定向到域。在它前面没有一个。
因为一个子域名会更难,因此我必须先重定向到另一个页面。否则浏览器会以循环结束。
对我来说似乎有点激烈,但它是我使它工作的唯一方法。
假设这是ASP.NET MVC ...
这个功能已经存在于通过System.Web.Mvc.RequireHttpsAttribute
类MVC V4。
是的。我没有使用MVC。 –
然后你真的需要提前给我们提供这些信息。 –
我在我的帖子上做了一个修改。认为我们不会去那里sinse我没有标记MVC –
您正在为url
变量硬编码www.blah...
。
如果您想使用的子域,你需要查询的原始请求:
这是从我的头顶。检查产生的字符串并相应地进行调整。
我从网上的另一个guid中得到了我的例子,并且只改编了一个小问题。仍然你的解决方案不会解决我的问题在http和https之间切换 –
你是什么意思“浏览器拒绝切换”?你看到在响应中设置了正确的重定向头(使用浏览器开发工具)吗?究竟是什么意外的浏览器行为? –
在Chrome中,我得到以下行为 http:// dartsghent。be - > https://wwww.dartsghent.be =成功 http://dartsghent.be - > https://dartsghent.be =页面将保留在http协议 –
我测试的越多,越多认为问题在重定向。即使我明确告诉我的重定向到https链接。它看起来像重定向正在移动我自己重定向到相同的协议,因为它现在在只要域是相同的。任何解决方案? –