Каких символов нужно оставить в строке Запроса HTTP?

Этот вопрос касается символов в части строки запроса URL, которые появляются после ? символ метки.

На Википедию оставляют определенные символы, как, и другие кодируются (обычно с a % escape-последовательность).

Я пытался разыскать это к фактическим спецификациям, так, чтобы я понял выравнивание позади каждого пункта маркированного списка на той странице Wikipedia.

Пример противоречия 1:

Спецификация HTML говорит для кодирования пространства как + и задерживает остальных к RFC1738. Однако этот RFC говорит это ~ небезопасно и кроме того что" ll небезопасные символы должны всегда кодироваться в URL". Это, кажется, противоречит Википедии.

На практике IE8 кодирует ~ в строках запроса это генерирует, в то время как FF3 оставляет его, как.

Пример противоречия 2:

Википедия указывает, что должны быть закодированы все символы, которые она не упоминает. ! не упоминается в Википедии. Но RFC1738 указывает это ! "специальный" символ, и "может использоваться незакодированный". Это, кажется, противоречит Википедии, которая говорит, что должна быть закодирована.

На практике IE8 кодирует ! в строках запроса это генерирует, в то время как FF3 оставляет его, как.

Я понимаю, что мораль этого, вероятно, будет для кодирования тех символов, которые вызывают сомнение между Википедией и спецификациями. Возможно, даже идя до кодирования всего, что не является [A-Za-z0-9]. Я был бы точно так же, как для знания фактических стандартов на этом.

Заключения

Алгоритм, описанный на Википедию, кодирует точно те символы, которые не являются незарезервированными символами RFC3986. Таким образом, это кодирует все символы кроме буквенно-цифрового индикатора и -._~. Как особый случай, пространство кодируется как + вместо %20 на RFC3986.

Некоторые приложения используют более старый RFC. Для сравнения незарезервированные символы RFC2396 являются буквенно-цифровым индикатором и !'()*-._~.

Для сравнения HTML5, работающий, черновой алгоритм кодирует все символы кроме буквенно-цифрового индикатора и *-._. Кодирование особого случая для пространства остается +. Заметные различия - это * не кодируется и ~ кодируется. (Технически, эта обработка * совместимо с RFC3986 даже при том, что * находится в reserved потому что это находится в sub-delims которым позволяют войти query производство.)

51
задан Jason Kresowaty 23 February 2010 в 15:47
поделиться