2013-12-11 7 views
24

ich eine Frage in Bezug auf URLs haben:Ist eine URL mit // im Pfadabschnitt gültig?

ich gelesen habe das RFC 3986 und noch eine Frage haben über eine URL:

Wenn ein URI eine Behörde Komponente enthält, dann die Pfadkomponente
muss entweder Sei leer oder beginne mit einem Schrägstrich ("/"). Wenn ein URI keine Autorisierungskomponente enthält, kann der Pfad
nicht mit zwei Schrägstrichen ("//") beginnen. Außerdem kann eine URI-Referenz
(Abschnitt 4.1) eine relative Pfadreferenz sein. In diesem Fall darf das erste Pfadsegment
kein Doppelpunktzeichen (":") enthalten. Die ABNF
erfordert fünf separate Regeln, um diese Fälle zu disambiguieren, nur eine von , die den Pfad Teilzeichenfolge innerhalb einer bestimmten URI-Referenz entspricht. Wir verwenden den generischen Begriff "Pfadkomponente", um den URI-Teilstring
zu beschreiben, der vom Parser mit einer dieser Regeln abgeglichen wird.

Ich weiß, dass //server.com:80/path/info gültig ist (es ist ein Schema relative URL)

Ich weiß auch, dass http://server.com:80/path//info gültig ist.

Aber ich bin nicht sicher, ob die folgende gilt:

http://server.com:80//path/info 

Das Problem hinter meiner Frage ist, dass ein Cookie nicht gesendet http://server.com:80//path/info, wenn zu /path

durch die URI http://server.com:80/path/info mit Einschränkung erstellt

Antwort

21

Siehe url with multiple forward slashes, does it break anything?, Are there any downsides to using double-slashes in URLs?, What does the double slash mean in URLs? und RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax.

Konsens: Browser werden die Anfrage so wie sie sind, sie werden die Anfrage nicht ändern. Der / Charakter ist der Pfad Separators, sondern als Pfadsegmente definiert werden als:

path-abempty = *("/" segment) 
segment  = *pchar 

Bedeutet der Schrägstrich nach http://example.com/ kann durch einen anderen slash, ad infinitum direkt verfolgt werden. Server ignorieren es möglicherweise, aber Browser nicht, wie Sie herausgefunden haben.

Der Satz:

Wenn ein URI der Pfad beginnen kann mit zwei Schrägstriche keine Behörde Komponente enthält, dann nicht („//“).

Ermöglicht protocol-relative URLs, aber heißt es ausdrücklich in diesem Fall keine Autorität (server.com:80 in Ihrem Beispiel) vorhanden sein kann.

Also: Ja, es ist gültig, nein, benutze es nicht.

+0

Also ist es ein Browser Fehler, dass ein Cookie für // Pfad nicht an/Pfad gesendet wird? –

+0

@Christian kein Fehler, '// path' ist so verschieden von'/path' wie '/ foo/path' und' /// path'. Es gibt ein "Unterverzeichnis" ohne Namen in '// Pfad', das gültig ist.Wenn Sie also ein Cookie für '// path' setzen, kann es nicht von'/path' gelesen werden, auch nicht umgekehrt. :) – CodeCaster

+1

Klingt legitim. Ich denke, ich warte ein oder zwei Tage, wenn es eine andere Antwort oder Meinung gibt und akzeptiere die Antwort wenn nicht. –

Verwandte Themen