Wir verfügen über eine ASP.Net MVC3-Site, auf die nur über HTTPS zugegriffen werden kann, indem das RequireHTTPS-Attribut auf dem Controller verwendet wird.
Wir erhalten zahlreiche HTTP HEAD-Anfragen, hauptsächlich von Twitter-Bots. Die Standardantwort von ASP.Net/MVC3 ist ein '500 Internal Server Error' und wird von elmah und log4net (jetzt ausgefiltert!) Abgefangen / protokolliert.
Ich könnte einen bestimmten Controller und eine Route schreiben, um diese Nicht-HTTPS-Anfragen gemäß dieser Frage zu bearbeiten - Antwort auf HEAD Anfrage in asp.NET MVC 3 .
Aber was wäre aus Sicht der Bots die beste Antwort? 200 um zu zeigen, dass der Server am Leben ist, eine 302 Weiterleitung an die HTTPS-URL, oder bleibe bei der 500, da die Site nicht über HTTP erreichbar ist?
Sie könnten mit
antworten %Vor%was
bedeutetDie in der Request-Line angegebene Methode ist für die vom Request-URI identifizierte Ressource nicht erlaubt. Die Antwort muss einen Zulassen-Header enthalten, der eine Liste gültiger Methoden für die angeforderte Ressource enthält.
oder mit
%Vor%was
bedeutetDer Server unterstützt nicht die Funktionalität, die zur Erfüllung der Anfrage benötigt wird. Dies ist die geeignete Antwort, wenn der Server die Anforderungsmethode nicht erkennt und diese für keine Ressource unterstützen kann.
Persönlich würde ich mit dem 405
gehen, da es auf der Clientseite ein Fehler ist, ein "Hey Mann, wir servieren das Zeug hier nicht." scheint mir passender zu sein als "Wovon zum Teufel redest du? Ich verstehe es nicht." eins, letzteres wird von vorgeschlagen, der Server erkennt die Request-Methode Bit des 501
description.
Alle HTTP-Statuscodes: Ссылка
In meinem Fall erhielt ich nur HEAD-Anfragen auf der Wurzel der Seite /
, die wie Bots-Sondierung aussieht. Also, ich war ein bisschen besorgt über die Rückgabe einer 500 oder 404.
Mehr zu 405
405 kann laut Albireos Antwort OK sein, aber Sie müssen die akzeptierten Verben wie folgt zurückgeben:
%Vor%302 Option
Betrachten Sie den Kommentar im MVC-Code, der die HEAD-Anfrage nicht umleitet:
%Vor%Es scheint eine andere Möglichkeit zu sein, eine 302 zu senden. Es sollte einigermaßen sicher sein, eine 302 an die HTTPS-Site zurückzugeben, um Bot-HEAD-Anfragen an root zu senden (was MVC für eine GET tut). Also habe ich Folgendes implementiert, das auf der Art basiert, wie MVC es macht:
%Vor%Implementieren Sie in global.asax.cs:
%Vor%Tags und Links asp.net-mvc-3 https http http-head