wake-up-neo.com

404-Header - HTTP 1.0 oder 1.1?

Warum sagt fast jedes Beispiel, das ich finden kann (einschließlich diese Frage von vor etwa einem Jahr), dass ein 404-Header HTTP/1.0 404 Not Found sein sollte, wenn wir wirklich HTTP 1.1 seit über einem Jahrzehnt verwenden? Gibt es einen Grund, stattdessen keinen HTTP/1.1 404 Not Found zu senden?

(Nicht, dass es so wichtig wäre ... Ich bin meistens nur neugierig.)

19
keithjgrant

Die Verwendung der HTTP-Version kann auf folgenden Faktoren basieren:

  • Ihre Webserver-Unterstützung für HTTP 1.0 oder 1.1
  • Die Unterstützung des Webbrowsers für HTTP 1.0 oder 1.1
  • Ihre Präferenz als Webentwickler, welche Protokollversion verwendet werden soll

Moderne Browser können sowohl 1.0 als auch 1.1 gut unterstützen, und sowohl der Client als auch der Server werden sich für die höchste Version entscheiden, die beide zusammen unterstützen können. Die wichtigsten Unterschiede zwischen den beiden Protokollen finden Sie unter: http://www8.org/w8-papers/5c-protocols/key/key.html

Es gibt jedoch keine wesentlichen Unterschiede bei der Verwendung von 404 Not Found. Seien Sie jedoch für Ihre gesamte Website konsistent. Wenn Sie HTTP/1.1 verwenden, verwenden Sie es auf Ihrer gesamten Website.

6
mauris

In PHP sollten Sie wahrscheinlich Folgendes verwenden:

header( $_SERVER['SERVER_PROTOCOL']." 404 Not Found", true );

oder noch besser

header( $_ENV['SERVER_PROTOCOL']." 404 Not Found", true );

(falls unterstützt) und überlassen Sie es dem Webserver, welches Protokoll verwendet werden soll.

Wenn Sie den Statuscode als 3. Parameter übergeben, können Sie im ersten Parameter alles übergeben, solange Sie nicht leer sind, und PHP übernimmt den Rest. Siehe http://php.net/header

header("foobar", true, 404 );

Außerdem: Sie können nicht request eine bestimmte Protokollversion von der Clientseite aus anfordern, da die Transaktion Hop-to-Hop-basiert ist und nicht Ende-zu-Ende. Der Server und Ihr Browser verwenden möglicherweise HTTP/1.1. Wenn jedoch ein Proxy dazwischen nur HTTP/1.0 verwendet, werden Sie dies auch von Ihrem Client sehen.

28
DanMan

Ich hätte gedacht, dass die Antwort HTTP/1.0 404 Not Found sein sollte, wenn die Anforderung ein HTTP 1.0 war, und HTTP/1.1 404 Not Found, wenn die Anforderung HTTP 1.1 war.

In der Praxis wird es für Server einfacher sein, eingegangene Antworten zurückzugeben, und die Antwort auf HTTP 1.0 wird sowohl von 1.0- als auch von 1.1-Clients verstanden. Es ist also am sichersten, dies zurückzugeben. Wenn Sie wissen, dass der Client 1.1 versteht (beispielsweise weil er darum gebeten hat), sollte die 1.1-Antwort funktionieren. 

Sicherlich, gehen Sie auf Nummer sicher und senden Sie die 1.0-Antwort.

2
skaffman

Es ist nicht so wichtig. Der Client ist dafür verantwortlich, dem Server mitzuteilen, welche HTTP-Version er verwendet. Dann soll der Server mit derselben Version antworten. Das passiert nicht immer. Ich habe gerade diese Antwort von einem Server erhalten: 

$ telnet example.com 80
Trying 123.123.123.123...
Connected to example.com.
Escape character is '^]'.
GET /fork HTTP/1.0

HTTP/1.1 404 Not Found
Content-Length: 1635
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Tue, 04 May 2010 22:30:36 GMT
Connection: close

Ich habe den Server gebeten, HTTP 1.0 zu verwenden, aber er fuhr fort und antwortete mit HTTP 1.1.

2
Kevin Panko

Betrachtet man sowohl die RFCs 1.1 als auch 1.0, ist 404 in beiden Bereichen vorhanden. Es ist also wahrscheinlich kein anderer Grund, als dass der Server dem Client mitteilt, dass er auf http 1.1 arbeitet.

Das heißt - wenn ein Server mit 404 über HTTP 1.1 antwortet, bedeutet dies, dass er stattdessen 410 - Gone zurückgeben konnte, um anzuzeigen, dass eine Ressource früher vorhanden war, dies aber nicht mehr tut. Dieser Statuscode ist nicht Teil von 1.0 und daher sind diese Informationen möglicherweisenützlich für einen Client (insbesondere Webcrawler).

EDIT 

Entschuldigung - diese Antwort ist wahrscheinlich umgekehrt! Ich denke, Sie können sich wahrscheinlich auf nur wenige Hände verlassen, auf die Anzahl der öffentlichen Webserver, die sich die Mühe machen werden, sich an alle Ressourcen zu erinnern, die früher vorhanden waren und nicht mehr funktionieren (auf keinen Fall würde ich das in meinen Webserver codieren!) - Daher ist es wahrscheinlich am besten, mit der 1.0 404 zu antworten, um anzuzeigen, dass "es ist einfach nicht da" und nicht "das ist nicht hier", aber andere Dinge auf der Website waren vielleicht früher, aber nicht mehr. In diesem Fall hätte ich Sie senden können ein 410 '.

Es ist auch die Tatsache, dass Sie nur 1,0-Clients für die Arbeit mit Ihrer Website zulassen.

Das ist alles ein bisschen pedantisch.

1
Andras Zoltan

Mit modernen Versionen von PHP können Sie auch die Funktion http_response_code verwenden und das Problem vollständig umgehen!

Diese Methode gefällt mir auch, weil in der Antwortnachricht kein Tippfehler besteht.

0
jsaigle