2009-06-17 7 views
6

Im moment gibt es viele Möglichkeiten, um ein HTTP-Status-Header zu schreiben:Syntax von HTTP-Status-Header

HTTP/1.1 404 Not Found 
Status: 404 
Status: 404 Not Found 

aber welche die semantisch korrekten und spezifikationskonform ist?

Edit: Von Status-Header ich meine this, mit einer Funktion wie PHP header().

Antwort

1

Das nächste, was ich auf eine Antwort gefunden habe, ist die Fast CGI spec, die Status zum Setzen von Statuscodes über Status- und Standort-Header.

4

Einige Informationen etwas später hinzufügen, da ich auf diese Frage stieß, während ich etwas verwandte.

Ich glaube, das Status-Header-Feld ursprünglich als Teil der CGI-Spezifikation erfunden wurde, RFC 3875:

https://tools.ietf.org/html/rfc3875#section-6.3.3

zu zitieren:

The Status header field contains a 3-digit integer result code that 
indicates the level of success of the script's attempt to handle the 
request. 

    Status   = "Status:" status-code SP reason-phrase NL 
    status-code = "200" | "302" | "400" | "501" | extension-code 
    extension-code = 3digit 
    reason-phrase = *TEXT 

Es ermöglicht ein CGI-Skript ein zurückzukehren Statuscode für den Webserver, der den Standard überschreibt, der in der HTTP-Statuszeile angezeigt wird. Normalerweise puffert der Server das Ergebnis des Skripts und gibt einen neuen Header für den Client aus. Dieser ist ein gültiger HTTP-Header, der mit einer geänderten HTTP-Statuszeile beginnt und das Header-Feld "Status:" des Skripts weglässt (plus einige andere Transformationen, die vom RFC beauftragt wurden).

Also alle Ihre Beispiele sind gültig von einem CGI-Skript, aber nur die erste ist wirklich gültig in einem HTTP-Header. Die letzten beiden sind nur gültig von einem CGI-Skript (oder vielleicht eine FastCGI-Anwendung).

Ein CGI-Skript kann auch im NPH-Modus (nicht geparste Kopfzeile) arbeiten, wenn es einen vollständigen und gültigen HTTP-Header generiert, den der Webserver wörtlich an den Client übergibt. Daher sollte dies kein Status: Header-Feld enthalten.

Hinweis, was mich interessiert ist, welchen Status sollte gewinnen, wenn ein NPH-Skript es ein bisschen falsch bekommt und das Status: Header-Feld, möglicherweise zusätzlich zu der HTTP-Statuszeile. Ich kann keinen klaren Hinweis finden, und ich vermute, dass es der Implementierung von allem überlassen ist, was die Ausgabe analysiert, entweder der Client oder der Server.