Является ли URL-адрес http://example.com/foo?bar
действительным?
Я ищу ссылку на что-нибудь официальное, в котором говорится так или иначе. Простой ответ «да / нет» или неподтвержденные данные не помогут.
url
query-parameters
Конли Оуэнс
источник
источник
Ответы:
URI RFC не устанавливает формат строки запроса. Хотя признается, что строка запроса часто будет содержать пары имя-значение, это не обязательно (например, она часто будет содержать другой URI).
HTML устанавливает, что форма, отправленная через HTTP GET, должна кодировать значения формы как пары имя-значение в форме «? Key1 = value1 & key2 = value2 ...» (правильно закодировано). Разбор строки запроса выполняется до серверного кода (например, движок сервлетов Java).
Вы не определяете, какую серверную среду вы используете, если таковая имеется, но возможно, что ваша серверная структура может предположить, что строка запроса всегда будет в парах имя-значение, и она может подавиться строкой запроса, которая в этом формате (например
?bar
). Если это ваш собственный код, анализирующий строку запроса, вам просто нужно убедиться, что вы обрабатываете этот формат строки запроса. Если это фреймворк, вам нужно проконсультироваться с вашей документацией или просто протестировать ее, чтобы увидеть, как она обрабатывается.источник
isindex
Магияname
от HTML5 позволяет отправить строку запроса без ключа значения формата stackoverflow.com/a/37579004/895245Они совершенно верны. Вы могли бы считать их эквивалентом большого мускулистого парня, молча стоящего за мессенджером. У парня нет имени и он не говорит, но одно его присутствие передает информацию.
источник
«Схема« http »используется для определения местоположения сетевых ресурсов по протоколу HTTP. В этом разделе определяется синтаксис и семантика конкретных схем для URL-адресов http». http://www.w3.org/Protocols/rfc2616/rfc2616.html
Так что да, все действительно после знака вопроса. Ваш сервер может интерпретировать по- разному, но эпизодически , вы можете увидеть некоторые языки лечения , что как логическое значение , которое является истинным , если в списке.
источник
Да, это действительно.
Если вы просто хотите проверить, существует ли параметр или нет, это один из способов сделать это.
источник
URI Spec
Единственная релевантная часть спецификации URI - знать, что все между первым
?
и первым#
соответствует определению спецификации запроса. Он может включать любые символы, например[:/.?]
. Это означает, что строка запроса, такая как?bar
, или?ten+green+apples
, допустима.Найдите RFC 3986 здесь
HTML Spec
isindex
не имеет смысла HTML5.Он объявлен устаревшим для использования только в качестве первого элемента формы и отправляется без имени.
В последний раз isindex поддерживался HTML3 . Он используется в HTML5 для упрощения обратной совместимости.
Поддержка в библиотеках
Поддержка в библиотеках для этого формата URI варьируется, однако некоторые библиотеки предоставляют устаревшую поддержку для упрощения использования
isindex
.Perl URI.pm (специальная поддержка)
Некоторые библиотеки, такие как Perl URI, предоставляют методы синтаксического анализа таких структур.
Node.js
url
(без специальной поддержки)В качестве еще одного гораздо более частого примера
node.js
используется обычный маршрут и упрощается синтаксический анализ, какparseQueryString
)Большинство других API-интерфейсов для анализа URI следуют примерно такому же принципу.
parse_url
следует аналогичной реализации, но возвращает только строку для запроса. Разбор в объектеk=>v
требуетparse_string()
источник
Это действительно: см. Википедия , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Синтаксические компоненты) .
источник
isindex
устаревшая магияname
из HTML5Эта устаревшая функция позволяет отправке формы генерировать такой URL-адрес, что является дополнительным доказательством того, что он действителен для HTML. Например:
генерирует URL-адрес типа:
Стандарт: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
однако считается устаревшим, как указано по адресу: https://stackoverflow.com/a/41689431/895245источник
Как и все другие описанные ответы, это совершенно верно для проверки, особенно для булевых типов
Вот простая функция для получения строки запроса по имени:
и теперь вы хотите проверить, существует ли искомая строка запроса, вы можете сделать простую вещь, такую как:
exampleQueryString
будет ,false
если функция не может найти строку запроса, в противном случае будетtrue
.источник