Разрешены ли квадратные скобки в URL-адресах?

Разрешены ли квадратные скобки в URL-адресах?

Я 9X_httpd заметил, что Apache commons HttpClient (3.0.1) выдает исключение 9X_url IOException, однако wget и Firefox принимают 9X_httpd квадратные скобки.

Пример URL:

http://example.com/path/to/file[3].html 

Мой HTTP-клиент 9X_apache встречает такие URL-адреса, но я не уверен, следует 9X_http ли исправлять код или выдавать исключение 9X_apache (как оно и должно быть).

56
0
10
Общее количество ответов: 10

Ответ #1

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

RFC 3986 состояния

Хост, определенный в Интернете Буквальный 9X_syntax адрес протокола, версия 6 [RFC3513] или 9X_square-bracket новее, выделяется заключив литерал IP 9X_square-bracket в квадратные скобки («[» и «]»). Этот это 9X_syntax единственное место, где квадратная скобка в 9X_http URI разрешены символы синтаксис.

Таким 9X_urls образом, вы не должны видеть такие URI в 9X_httpd теории, поскольку они должны поступать в 9X_url закодированном виде.

59
0

Ответ #2

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

Квадратные скобки [ и ] в URL-адресах не часто 9X_square-bracket поддерживаются.

Замените их на %5B и %5D:

  • Следующий пример с использованием 9X_http командной строки основан на bash и sed:

    url='http://example.com?day=[0-3][0-9]' encoded_url="$( sed 's/\[/%5B/g;s/]/%5D/g' <<< "$url")" 
  • Использование 9X_urls Java URLEncoder.encode(String s, String enc)

  • Использование PHP rawurlencode() или urlencode()

     

    вывод:

     

    или:

     
  • Используя 9X_url ваш любимый язык программирования ... Пожалуйста, расширите 9X_square-bracket этот ответ, разместив комментарий или отредактировав 9X_square-bracket этот ответ, чтобы добавить функцию, которую 9X_apache вы используете на своем языке программирования 9X_urls ;-)

Дополнительные сведения см. в RFC 3986 с указанием 9X_syntax синтаксиса URL. Приложение A посвящено %-encoding в строке запроса 9X_http (скобки, принадлежащие к «gen-delims», должны быть %-encoded).

22
0

Ответ #3

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

Я знаю, что этот вопрос немного устарел, но 9X_square-bracket я просто хотел отметить, что PHP использует 9X_url скобки для передачи массивов в URL.

http://www.example.com/foo.php?bar[]=1&bar[]=2&bar[]=3 

В этом 9X_square-bracket случае $_GET['bar'] будет содержать array(1, 2, 3).

15
1

  • Верно, но они все равно должны быть закодированы, если браузер не делает этого автоматически. ...

Ответ #4

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

Практически единственными символами, которые 9X_syntax не разрешены в именах путей, являются # и 9X_syntax ? поскольку они означают конец пути.

В uri 9X_url rfc будет окончательный ответ:

http://www.ietf.org/rfc/rfc1738.txt

Небезопасно:

Персонажи 9X_httpd могут быть небезопасны по ряду причин. Космос символ 9X_square-bracket небезопасен, так как значительные пробелы 9X_urls могут исчезнуть и незначащие пробелы 9X_syntax могут быть введены, когда URL-адреса транскрибируются 9X_square-bracket или набраны или подвергнуты обработке 9X_apache текстовыми программами. Символы «<�» и 9X_http «>» небезопасны, поскольку они используются 9X_syntax в качестве разделители вокруг URL-адресов 9X_apache в свободном тексте; кавычка (""") используется 9X_syntax для разграничить URL-адреса в некоторых 9X_square-bracket системах. Символ "#" небезопасен 9X_http и должен всегда кодироваться, потому 9X_urls что он используется во всемирной паутине 9X_http и в других системы для отделения URL-адреса 9X_http от идентификатора фрагмента/якоря, который 9X_urls может Следуйте за ним. Символ "%" небезопасен, поскольку 9X_httpd он используется для кодировки других 9X_syntax символов. Другие символы небезопасны, потому 9X_syntax что известно, что шлюзы и другие транспортные 9X_urls агенты иногда модифицируют такие персонажи. Это 9X_apache символы «{», «}», «|», «\», «^», «~», "[", "]" и 9X_httpd "`".

Все небезопасные символы всегда 9X_syntax должны быть закодированы в URL-адресе. За например, символ 9X_url "#" должен быть закодирован в 9X_http URL-адресах даже в системы, которые 9X_square-bracket обычно не имеют дело с фрагментом или привязкой идентификаторы, так 9X_apache что если URL-адрес скопирован в другую систему, которая использует 9X_httpd их, нет необходимости менять кодировку URL.

Ответ 9X_urls заключается в том, что они должны быть закодированы 9X_square-bracket в шестнадцатеричном формате, но, зная закон 9X_http Постеля, большинство вещей примет их дословно.

5
1

  • Все небезопасные символы ДОЛЖНЫ всегда кодироваться в URL. ОБЯЗАТЕЛЬНО, а ...

Ответ #5

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

Любой браузер или веб-программное обеспечение, которое 9X_square-bracket принимает URL-адреса и не выдает исключения 9X_url при введении специальных символов, почти 9X_httpd гарантированно кодирует специальные символы 9X_http за кулисами. Фигурные скобки, квадратные 9X_apache скобки, пробелы и т. д. имеют специальные 9X_apache закодированные способы их представления, чтобы 9X_apache не создавать конфликтов. Согласно предыдущим 9X_square-bracket ответам, самый безопасный способ справиться 9X_http с ними - это закодировать их в URL-адресе, прежде 9X_syntax чем передавать их чему-то, что попытается 9X_httpd разрешить URL-адрес.

5
0

Ответ #6

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

Для использования общего класса HttpClient 9X_syntax вам нужно изучить класс org.apache.commons.httpclient.util.URIUtil, в 9X_square-bracket частности, метод encode(). Используйте его 9X_http для URI-кодирования URL-адреса, прежде чем 9X_url пытаться его получить.

2
0

Ответ #7

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

Похоже, что StackOverflow их не кодирует:

https://stackoverflow.com/search?q=square+brackets+[url]

9X_square-bracket

2
1

  • Я считаю, что вы видите, что ваш браузер принимает их в качестве входных данных. Однако, е ...

Ответ #8

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

Лучше всего кодировать их в URL, так как 9X_urls они явно не поддерживаются на всех веб-серверах. Иногда, даже 9X_httpd когда есть стандарт, не все ему следуют.

1
0

Ответ #9

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

В соответствии с URL specification квадратные скобки не являются 9X_apache допустимыми символами URL.

Вот соответствующие 9X_urls фрагменты:

«Национальные» и «пунктуационные» символы 9X_apache не появляются ни в продукции и поэтому 9X_square-bracket могут не отображаться в URL-адресах.
национальный 9X_http { | } | линия | [ | ] | \ | ^ | ~
знаки 9X_url препинания < | >

1
0

Ответ #10

Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?

Квадратные скобки считаются небезопасными, но 9X_square-bracket большинство браузеров обрабатывают их правильно. При 9X_url этом квадратные скобки лучше заменить некоторыми 9X_apache другими символами.

1
0