404 vs 403, wenn der Verzeichnisindex fehlt

8

Dies ist hauptsächlich eine philosophische Frage über die beste Art, die HTTP-Spezifikation zu interpretieren. Sollte ein Verzeichnis ohne Verzeichnisindex (z. B. index.html) 404 oder 403 zurückgeben? (403 ist der Standard in Apache.)

Angenommen, die folgenden URLs sind vorhanden und verfügbar:

%Vor%

Aber es gibt nichts an:

%Vor%

(Angenommen, wir verwenden 301-Zeichen, um nachfolgende Schrägstriche für alle URLs zu erzwingen.)

Ich denke, mehrere Dinge sollten berücksichtigt werden:

  • Standardmäßig gibt Apache in diesem Szenario 403 zurück. Das ist wichtig für mich. Sie haben über dieses Zeug nachgedacht, und sie haben die Entscheidung getroffen, 403 zu verwenden.
  • Laut W3C bedeutet 403 "Der Server hat die Anfrage verstanden, weigert sich aber, sie zu erfüllen." Ich nehme an, dass Sie 403 zurückgeben sollten, wenn die URL sinnvoll, aber dennoch verboten ist.
  • 403 kann zur Offenlegung von Informationen führen, wenn der Client richtigerweise vermutet, dass die URL einem realen Verzeichnis auf der Festplatte zugeordnet ist.
  • http://example.com/files/ ist keine Ressource und die Tatsache, dass sie intern einem Verzeichnis zugeordnet ist, sollte für den Statuscode nicht relevant sein.
  • Wenn Sie das URL-Schema so interpretieren, dass es eine Verzeichnisstruktur aus der Kundenperspektive definiert, ist die interne Implementierung immer noch irrelevant, aber vielleicht sollte die äußere Erscheinung etwas mit den Statuscodes zu tun haben. Vielleicht sollten Sie auch dann, wenn Sie die gleiche URL-Struktur ohne internes Verwenden von Verzeichnissen erstellt haben, immer noch 403s verwenden, da es sich um die Wahrnehmung einer Verzeichnisstruktur durch den Client handelt.

Was halten Sie in der Bilanz für den besten Ansatz? Sollten wir nur sagen: "Eine Ressource ist eine Ressource, und wenn sie nicht existiert, ist es eine 404?" Oder sollten wir sagen, "wenn es Schrägstriche hat, sieht es wie ein Verzeichnis für den Client aus, und daher ist es ein 403, wenn es keinen Index gibt?"

Wenn Sie im Camp 403 sind, denken Sie, Sie sollten sich alle Mühe geben, 403s zurückzugeben, auch wenn die interne Implementierung keine Verzeichnisse verwendet? Angenommen, Sie haben beispielsweise eine dynamische Webanwendung mit dieser URL: http://example.com/users/joe , die einem Code zugeordnet ist, der die Profilseite für Joe generiert. Angenommen, Sie schreiben nichts, das alle Benutzer auflistet, sollte http://example.com/users/ 403 zurückgeben? (Viele, wenn nicht alle Web-Frameworks geben in diesem Fall 404 zurück.)

    
rlkw1024 22.02.2011, 07:31
quelle

2 Antworten

8

Der erste Schritt zur Beantwortung dieser Frage ist der Verweis auf RFC 2616: HTTP / 1.1 . Insbesondere die Abschnitte sprechen über 403 Forbidden und 404 nicht gefunden .

  
  • 10.4.4 403 verboten
  •   

Der Server hat die Anfrage verstanden, weigert sich aber, sie zu erfüllen. Die Autorisierung wird nicht helfen und die Anfrage sollte nicht wiederholt werden. Wenn die Anfrage-Methode nicht HEAD war und der Server öffentlich machen wollte, warum die Anfrage nicht erfüllt wurde, SOLLTE der Grund für die Ablehnung in der Entität beschrieben werden. Wenn der Server diese Informationen dem Client nicht zur Verfügung stellen möchte, kann stattdessen der Statuscode 404 (Not Found) verwendet werden.

     
  • 10.4.5 404 nicht gefunden
  •   

Der Server hat nichts gefunden, was mit dem Anfrage-URI übereinstimmt. Es wird kein Hinweis gegeben, ob die Bedingung vorübergehend oder dauerhaft ist. Der Statuscode 410 (Gone) SOLLTE verwendet werden, wenn der Server durch einen intern konfigurierbaren Mechanismus weiß, dass eine alte Ressource permanent nicht verfügbar ist und keine Weiterleitungsadresse hat. Dieser Statuscode wird häufig verwendet, wenn der Server nicht genau angeben möchte, warum die Anforderung abgelehnt wurde oder wann keine andere Antwort anwendbar ist.

Meine Interpretation davon ist, dass 404 der allgemeinere Fehlercode ist, der einfach sagt "da ist nichts". 403 sagt "da ist nichts, versuche es nicht noch einmal!".

Ein Grund, warum Apache 403 in Verzeichnissen ohne explizite Indexdateien zurückgibt, ist, dass die automatische Indexierung (d. h. das Auflisten aller darin enthaltenen Dateien) deaktiviert ist (a.k.a "verboten"). In diesem Fall ist es sinnvoller zu sagen, "alle Dateien in diesem Verzeichnis aufzulisten", als "es gibt kein Verzeichnis" zu sagen.

    
Joachim Sauer 22.02.2011, 08:22
quelle
2

Ein weiteres Argument, warum 404 vorzuziehen ist: google webmaster tools.

Tatsächlich zeigt das Google Webmaster Tool bei einem 404 den Referer an (damit Sie die fehlerhafte Verbindung zum Verzeichnis bereinigen können), während es bei einem 403 nicht angezeigt wird.

    
Alain Knaff 18.02.2012 23:40
quelle