Korrekte Antwort auf HTTP HEAD Anfrage auf HTTPS Only Site

8

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?

    
Chris 15.12.2011, 17:15
quelle

2 Antworten

5

Sie könnten mit

antworten %Vor%

was

bedeutet
  

Die 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

bedeutet
  

Der 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: Ссылка

    
Albireo 16.12.2011 10:18
quelle
1

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%     
acarlon 18.02.2014 02:31
quelle