%20 и + еднакви ли са в http url?

Знам, че %20 и + декодират една и съща двоична стойност (интервал) и за повечето уеб сървъри, особено тези, които картографират физически файлове, те ще сочат към един и същ ресурс.

Но въпросът ми е трябва ли url като http://www.example.org/hello%20world сочат към същия ресурс като http://www.example.org/hello+world, канонично еднакви ли са?

В HTTP/1.0 + не се съпостави с интервал, така че конкретно питам за HTTP/1.1.


person Evert    schedule 21.10.2010    source източник
comment
Никога не съм обмислял това преди, ще бъде интересно да видя правилния отговор на този хубав въпрос.   -  person Dave    schedule 22.10.2010


Отговори (1)


Само в низа на заявката: знакът плюс е запазен знак, така че трябва да бъде кодиран, за да предаде действителен „+“ или в пътя, или в низа на заявката. Използването му като заместител на интервали е W3C Препоръка, която се отнася само за заявката низ:

В низа на заявката знакът плюс е запазен като съкратена нотация за интервал. Следователно реалните знаци плюс трябва да бъдат кодирани. Този метод беше използван, за да направи URI на заявките по-лесни за предаване в системи, които не позволяват интервали.

Сравнение на URI (RFC 2616):

Когато сравнява два URI, за да реши дали съвпадат или не, клиентът ТРЯБВА да използва сравнение октет по октет на целите URI, с тези изключения:

  - 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 "/".

Символи, различни от тези в "резервирани" и "небезопасни" набори (вижте RFC 2396 [42]), са еквивалентни на тяхното ""%" HEX HEX" кодиране.

Запазени знаци (RFC 2396)

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

И така, на третия кръг: няма нищо официално, което да ги декларира като едно и също нещо. Използването на '+' буквално за насочване на http://example.org/hello+world към директория, наречена hello+world, е неправилно, но нищо не казва, че вместо това трябва да се счита за еквивалентно на интервал.

person Brad Mace    schedule 21.10.2010
comment
В цитирания раздел се казва В низа на заявката знакът плюс е запазен като съкратена нотация за интервал. В рамките на низ на заявка не е същото като в URL адреса като цяло. В общия случай отговорът е не, както и да е така - person Davy8; 22.10.2010
comment
В примера на OP за http://www.example.org/hello%20world и http://www.example.org/hello+world Цитираният от вас раздел не е приложим, защото не е част от низ на заявка. - person Davy8; 22.10.2010
comment
@Davy8 - Мисля, че вече ме подхвърлихте към верния отговор :) - person Brad Mace; 22.10.2010