【发布时间】:2011-12-15 17:15:34
【问题描述】:
我们有一个只能通过 HTTPS 访问的 ASP.Net MVC3 站点,方法是使用控制器上的 RequireHTTPS 属性。
我们收到了大量的 HTTP HEAD 方法请求,主要来自 Twitter 机器人。默认的 ASP.Net/MVC3 响应是“500 内部服务器错误”,并且正在被 elmah 和 log4net 捕获/记录(现在被过滤掉了!)。
我可以根据这个问题编写一个特定的控制器和路由来处理这些非 HTTPS 请求 - Responding to HEAD Request in asp.NET MVC 3。
但是,从机器人的角度来看,最好的响应是什么? 200 表示服务器处于活动状态,302 重定向到 HTTPS 网址,还是坚持使用 500,因为该站点无法通过 HTTP 访问?
【问题讨论】:
-
500 似乎不对...没有状态码吗? 500 表明某处实际上存在错误。
-
我建议不要抛出 500 错误。如果该站点只能通过 HTTPS 访问。我会使用 301 重定向(永久)而不是 302(临时)。您还可以使用重写规则将所有非 https 流量重定向到 https 解决问题。
-
同意不抛出 500 错误,但这是 MVC3 的默认行为:
System.InvalidOperationException: The requested resource can only be accessed via SSL. at System.Web.Mvc.RequireHttpsAttribute.HandleNonHttpsRequest(AuthorizationContext filterContext) at System.Web.Mvc.RequireHttpsAttribute.OnAuthorization(AuthorizationContext filterContext) at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList1 过滤器,ActionDescriptor actionDescriptor)
标签: asp.net-mvc-3 http https http-head