就我而言,我只是在站点的根目录上收到 HEAD 请求,/
这似乎是机器人探测。所以,我有点担心返回 500 或 404。
更多关于 405
根据 Albireo 的回答,405 可能没问题,但您需要返回已接受的动词,例如:
// 405 must include allowable methods.
// https://tools.ietf.org/html/rfc2616#section-14.7
httpContext.Response.StatusCode = (int)HttpStatusCode.MethodNotAllowed;
httpContext.Response.AddHeader( "Allow", "GET" );
302选项
查看未重定向 HEAD 请求的 MVC 代码中的注释:
//only redirect for GET requests, otherwise the browser might not propagate the verb and request
//body correctly.
似乎另一种选择是发送 302。将 302 返回到 HTTPS 站点以将机器人 HEAD 请求返回到 root 应该是相当安全的(这就是 MVC 对 GET 所做的)。因此,我根据 MVC 的执行方式实现了以下内容:
if( isHead == true && isRoot == true )
{
httpContext.ClearError();
httpContext.Response.Clear();
httpContext.Response.StatusCode = 302;
string url = "https://" + httpContext.Request.Url.Host + httpContext.Request.RawUrl;
httpContext.Response.Redirect(url, endResponse: false);
return;
}
在 global.asax.cs 中实现:
protected void Application_Error( object sender, EventArgs e )
{
//Your code here
}