URL & Leerzeichen
levu
- https
0 ChrisB0 levu0 Der Martin0 levu0 ChrisB0 levu
0 Der Martin0 levu
Hallo,
ich will einen Mini-Webserver schreiben, der aber auch ein eigenes (HTTP-ähnliches) Protokoll unterstützt. Nun frage ich mich gerade, wie die erste Zeile beim Webserver ankommt.
So: "GET /a b c.html" oder so: "GET /a%20b%20c.html"
Der Grund ist, dass ich eigentlich vorhatte, die erste Zeile durch Leerzeichen zu parsen, da das eigene Protokoll mehrere Argumente kennt (z.B. "COMMAND arg1 arg2 arg3"). Kann man sich drauf verlassen, dass der Browser die Leerzeichen %20-encodet?
mfg, Flo
Hi,
So: "GET /a b c.html" oder so: "GET /a%20b%20c.html"
Der Grund ist, dass ich eigentlich vorhatte, die erste Zeile durch Leerzeichen zu parsen, da das eigene Protokoll mehrere Argumente kennt (z.B. "COMMAND arg1 arg2 arg3"). Kann man sich drauf verlassen, dass der Browser die Leerzeichen %20-encodet?
Welche Art von Anfragen und "Syntax" dieser *dein* Protkoll unterstuetzt, definierst du.
Wie Clients zu antworten ist, die nach dieser Definition fehlerhafte Anfragen stellen, ebenfalls.
MfG ChrisB
Hallo,
Welche Art von Anfragen und "Syntax" dieser *dein* Protkoll unterstuetzt, definierst du.
diese_s_ http://www.duden-suche.de/suche/trefferliste.php?suchbegriff[AND=protokoll&suche=homepage&treffer_pro_seite=10&modus=title&level=125&x=0&y=0@title=das, nicht der]
HTTP unterstützt er auch (soll-wert) aber ich habe die Befürchtung, dass dateinamen getrennt werden, wenn ich am leerzeichen trenne (ist-wert)
Wie Clients zu antworten ist, die nach dieser Definition fehlerhafte Anfragen stellen, ebenfalls.
Das HTTP mag ja gültig sein. ich will mein (noch nicht fertig definiertes Protokoll) so machen, dass der Server HTTP verarbeiten kann, aber es wäre das einfachste, die "Argumente" am Leerzeichen zu trennen.
mfg, Flo
Hi,
Welche Art von Anfragen und "Syntax" dieser *dein* Protkoll unterstuetzt, definierst du.
diese_s_ http://www.duden-suche.de/suche/trefferliste.php?suchbegriff[AND=protokoll&suche=homepage&treffer_pro_seite=10&modus=title&level=125&x=0&y=0@title=das, nicht der]
lies Chris' Satz nochmal durch, und versuche die Grammatik zu verstehen. Dann wirst du feststellen, dass "dieser" richtig war, weil es sich nicht auf "Protokoll" bezieht, sondern auf "Anfragen". Und zwar im Genitiv.
ich will mein (noch nicht fertig definiertes Protokoll) so machen, dass der Server HTTP verarbeiten kann, aber es wäre das einfachste, die "Argumente" am Leerzeichen zu trennen.
Ich kenne deine speziellen Anforderungen nicht. Aber ich würde dir raten, eher den Schrägstrich '/' als Trennzeichen zu nehmen. Das ist ein ganz alltägliches und gültiges Zeichen in URLs, kann also nicht mit anderen Beschränkungen kollidieren.
So long,
Martin
Hallo,
Dann würde die URL ja getrennt werden. Es muss ein Zeichen sein, was in einer URL nicht vorkommen kann.
Grammatik hab ich auch kapiert^^
mfg, Flo
Hi,
Dann würde die URL ja getrennt werden. Es muss ein Zeichen sein, was in einer URL nicht vorkommen kann.
Nun, deshalb nutzt HTTP ja bspw. das Leerzeichen.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html
The Request-Line begins with a method token, followed by the Request-URI and the protocol version, and ending with CRLF. The elements are separated by SP characters. No CR or LF is allowed except in the final CRLF sequence.
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
SP steht fuer Space.
MfG ChrisB
Hallo,
Danke, genau die Info hab ich gebraucht :)
mfg, Flo
Hi,
Dann würde die URL ja getrennt werden.
was meinst du mit "getrennt"?
Es muss ein Zeichen sein, was in einer URL nicht vorkommen kann.
Nein, eben nicht. Wenn ich so eine Aufgabe hätte, würde ich darauf achten, dass mein neues Protokoll mit HTTP kompatibel bleibt. Und dann muss es sich auch den Regeln von HTTP fügen. Ein Request (ein Kommando) könnte dann z.B. so aussehen:
GET /command/param1/param2/param3
Das wäre mit HTTP kompatibel, und deine Server-Applikation könnte den Request auf "/command" am Anfang prüfen, und dann die einzelnen Parameter an den Slashes abtrennen.
Mit den Leerzeichen würdest du dagegen riskieren, dass dein Protokoll auf dem Übertragungsweg z.B. durch einen Proxy verstümmelt wird, weil es nicht den Regeln von HTTP entspricht.
Grammatik hab ich auch kapiert^^
Na fein. :-)
Ciao,
Martin
Hallo,
GET /command/param1/param2/param3 HTTP/1.1
Das würde ja heißen, dass es in die folgenden Tokens zerlegt werden würde (/ als trenner):
Während bei einem Leerzeichen:
Ich will nicht nur die URL zur Werteübergabe nutzen, sondern die ganze erste Zeile :)
mfg, Flo