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:
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. 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.)
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.
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.
Tags und Links http apache http-status-code-404 http-status-codes http-status-code-403