在仅HTTPS站点上对HTTP HEAD请求的正确响应

Chr*_*ris 8 https http http-head asp.net-mvc-3

我们有一个ASP.Net MVC3站点只能通过HTTPS访问,方法是使用控制器上的RequireHTTPS属性.

我们收到了许多HTTP HEAD方法请求,主要来自看似Twitter的机器人.默认的ASP.Net/MVC3响应是'500内部服务器错误',正在被elmah和log4net捕获/记录(现已过滤掉!).

我可以根据这个问题编写一个特定的控制器和路由来处理这些非HTTPS请求 - 在asp.NET MVC 3中响应HEAD请求.

但是,从机器人的角度来看,最好的反应是什么呢?200显示服务器是活动的,302重定向到HTTPS网址,还是坚持500,因为网站无法通过HTTP访问?

Alb*_*reo 3

你可以回应

405 Method Not Allowed
Run Code Online (Sandbox Code Playgroud)

意思是

Request-URI 标识的资源不允许使用 Request-Line 中指定的方法。响应必须包含一个允许标头,其中包含所请求资源的有效方法列表。

或与

501 Not Implemented
Run Code Online (Sandbox Code Playgroud)

意思是

服务器不支持完成请求所需的功能。当服务器无法识别请求方法并且无法支持任何资源时,这是适当的响应。

就我个人而言,我会选择“嘿,伙计,我们这里不提供这些东西”,405因为这是客户端的错误。对我来说,这似乎比“你到底在说什么?我听不懂”更合适。一、后者是服务器无法识别请求方法位描述的提示。501

所有HTTP状态代码:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

  • “405 Method not allowed”不是正确的响应。使用 http 而不是 https 并不是使用不允许的方法。http(s) 是 URI 中的“方案”。method 是发送请求的类型,可以是 `GET`、`HEAD`、`POST`、`PUT`、`DELETE`、`CONNECT`、`OPTIONS`、`TRACE` 或 `PATCH` 中的任何一个(请参阅 https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)。抛出 405 将告诉客户端发生了错误的错误。 (4认同)