2010-10-21 32 views
8

Ich weiß, dass% 20 und + beide auf den gleichen binären Wert (ein Leerzeichen) dekodieren, und für die meisten Webserver, insbesondere diejenigen, die physischen Dateien zugeordnet sind, zeigen sie auf die gleiche Ressource.Sind% 20 und + gleich in einer HTTP-URL?

Aber meine Frage ist, muss eine URL wie http://www.example.org/hello%20world zeigen Sie auf die gleiche Ressource wie http://www.example.org/hello+world, sind sie kanonisch die gleichen?

In HTTP/1.0 + wurde nicht zu einem Leerzeichen zugeordnet, also ich frage speziell nach HTTP/1.1.

+0

Nie zuvor in Betracht gezogen, wird es interessant sein, die richtige Antwort auf diese, nette Frage zu sehen. – Dave

Antwort

4

Nur innerhalb der Abfragezeichenfolge: das Pluszeichen ist ein reserviertes Zeichen, also muss codiert werden, um ein tatsächliches '+' entweder im Pfad oder in der Abfragezeichenfolge zu übergeben. Es ist als Ersatz für die Räume ein W3C ist Recommendation, die nur für den Query-String gilt:

Innerhalb des Query-String, das Pluszeichen als Kurzschreibweise reserviert für einen Raum. Daher müssen echte Pluszeichen codiert werden. Diese Methode wurde verwendet, um Abfrage-URIs einfacher in -Systemen zu übergeben, die keine Leerzeichen zulassen.

URI-Vergleich (RFC 2616):

Wenn zwei URIs zu vergleichen, um zu entscheiden, ob sie übereinstimmen oder nicht, sollte ein Kunde ein case-sensitive Oktett-by-Oktett Vergleich des gesamten verwenden URIs, mit diese Ausnahmen:

- A port that is empty or not given is equivalent to the default 
    port for that URI-reference; 

    - Comparisons of host names MUST be case-insensitive; 

    - Comparisons of scheme names MUST be case-insensitive; 

    - An empty abs_path is equivalent to an abs_path of "/". 

Charaktere andere als die in der "reserviert" und " unsichere "Sätze (siehe RFC 2396 [42]) entsprechen ihrer " "%" HEX HEX "Codierung.

reservierte Zeichen (RFC 2396)

";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "

Also, auf dem dritten Durchstart: es gibt nichts Offizielles, das erklärt, dass sie dasselbe sind. Die Verwendung von '+' zur direkten Weiterleitung von http://example.org/hello+world an ein Verzeichnis mit der Bezeichnung hello+world ist falsch, aber es gibt nichts, das besagt, dass es stattdessen als äquivalent zu einem Leerzeichen betrachtet werden sollte.

+1

Im zitierten Abschnitt heißt es "** Innerhalb der Abfragezeichenfolge ** ist das Pluszeichen als Kurzschreibweise für ein Leerzeichen reserviert." Innerhalb einer Abfrage ist die Zeichenfolge in der URL im Allgemeinen nicht identisch. Im allgemeinen Fall ist die Antwort nein, jedoch kann es – Davy8

+1

sein. Im Beispiel des OPs von http: // www.example.org/hello% 20world und http: // www.example.org/hello + world Der von Ihnen angegebene Abschnitt wird nicht angewendet, da er nicht Teil einer Abfragezeichenfolge ist. – Davy8

+0

@ Davy8 - Ich glaube du hast mich jetzt zur richtigen Antwort gestoßen :) –

Verwandte Themen