2016-09-09 7 views
0

Ich versuche, einen HTTP 1.0 (und nur 1.0 für den Moment) Server in C++ zu codieren.HTTP-Versionskonflikt - Server-Antwortcode

Ich habe die HTTP 1.0 Spezifikationen hier gelesen: https://www.w3.org/Protocols/HTTP/1.0/spec.html. Auf Abschnitt 3 "Protokollparameter", Unterabschnitt 3.1 "HTTP-Version" habe ich nichts gefunden, wenn ein Client eine andere Version vom Server gesendet hat.

Nach https://www.w3.org/DesignIssues/Protocolcomms.html, wenn Versionskonflikt, haben wir zwei Möglichkeiten:

  • Version (Server) = Version (Client) + 1: zur vorherigen Version herabzustufen Sollte (Impossible Mein Server handle nur ? eine bestimmte Version - kann ich umgehen muss HTTP 0.9)
  • Version (Server)> Version (Client) + 1: eine Warnung an den Benutzer gegeben ist (wich ein 4xx, 5xx)
?

Ein offizielles Zitat von den IETF RFCs sollte nennenswert sein, oder zumindest ein Beispiel mit den aktuell am häufigsten verwendeten Webservern wie Apache oder Nginx.

Antwort

2

Sie scheinen das letztgenannte Dokument falsch zu interpretieren. In Ihrem Fall ist das Problem v(ME) < v(IT) (oder v(ME) + 1 = v(IT)), und das Dokument bietet keine Lösung für diese Situation.

jedoch RFC 2616 (HTTP/1.1) Staaten (in 19,6):

Und wir erwarten würden, HTTP/1.1-Clients:

  • erkennen das Format der Zustands- Linie für HTTP/1.0 und 1.1 Antworten;

  • verstehen Sie alle gültigen Antwort im Format von HTTP/0.9, 1.0 oder 1.1.

Also, wenn Sie ein vollständig kompatibles 1.0-Server implementieren, sollte der Kunde seine Antworten akzeptieren.

RFC 7230 hat auch einige Hinweise zum Umgang mit 1.1-Clients.

+0

Wenn ich RFC 7230 richtig verstehe, wenn ich eine Anfrage für die HTTP-Version x.y mit x! = 1 erhalte, sollte ich eine 505 (HTTP-Version nicht unterstützt) senden, sonst sollte ich eine HTTP 1.0 normale Antwort senden? – Ayak973

+0

Ich denke schon, obwohl [dieses Dokument] (https://www.w3.org/Protocols/HTTP/1.0/spec.html#HTTP-Version) (das du erwähnt hast) besagt, dass HTTP/1.0 Server _must_ HTTP/0,9 Anfragen. Aber ich würde nicht die 0.9-Unterstützung selbst implementieren :) – robertklep

+0

Ah, ich habe das vermisst, RFC sind pure Kopfschmerzen für mich ... Ich werde HTTP1.1 sowie 0.9 RFC-konform zu unterstützen. Danke für die Klarstellungen! – Ayak973