Действителен ли URL типа http://example.com/foo?bar
?
Я ищу ссылку на что-нибудь официальное, в котором говорится так или иначе. Простой ответ да / нет или анекдотические свидетельства не помогут.
Действителен ли URL типа http://example.com/foo?bar
?
Я ищу ссылку на что-нибудь официальное, в котором говорится так или иначе. Простой ответ да / нет или анекдотические свидетельства не помогут.
URI RFC не требует обязательного формата для строки запроса. Хотя известно, что строка запроса часто содержит пары имя-значение, это не обязательно (например, она часто будет содержать другой URI).
3.4. Запрос
Компонент запроса содержит неиерархические данные, которые вместе с данными в компоненте пути (раздел 3.3) служат для идентификации ресурса в рамках схемы URI и органа присвоения имен (если есть). ...
... Однако, поскольку компоненты запроса часто используются для передачи идентифицирующей информации в виде пар "ключ = значение", а одно часто используемое значение является ссылкой на другой URI, ...
HTML устанавливает, что форма, отправленная через HTTP GET должен кодировать значения формы как пары имя-значение в форме «? ключ1 = значение1 & ключ2 = значение2 ...» (правильно закодировано). Анализ строки запроса выполняется серверным кодом (например, механизмом сервлетов Java).
Вы не определяете, какую серверную структуру вы используете, если таковая имеется, но вполне возможно, что ваша серверная структура может предполагать, что строка запроса всегда будет в парах имя-значение, и она может подавиться строкой запроса, которая не в этом формате (например, ?bar
). Если это ваш собственный код, анализирующий строку запроса, вам просто нужно убедиться, что вы обрабатываете этот формат строки запроса. Если это фреймворк, вам нужно проконсультироваться с вашей документацией или просто протестировать ее, чтобы увидеть, как с ней работают.
isindex
magic name
из HTML5 позволяет отправлять строку запроса без формата "ключ-значение" stackoverflow.com/a/37579004/895245
- person Ciro Santilli 新疆再教育营六四事件ۍ 02.06.2016
Они совершенно верны. Вы могли бы считать их эквивалентом большого мускулистого парня, молча стоящего позади гонца мафии. У парня нет имени и он не говорит, но одно его присутствие передает информацию.
«Схема« http »используется для поиска сетевых ресурсов по протоколу HTTP. В этом разделе определяется специфический для схемы синтаксис и семантика для URL-адресов http». http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Итак, да, все, что угодно, стоит после вопросительного знака. Ваш сервер может интерпретировать это по-разному, но вы можете случайно увидеть, что некоторые языки трактуют это как логическое значение, которое истинно, если оно указано.
Да, это действительно так.
Если кто-то просто хочет проверить, существует ли параметр или нет, это один из способов сделать это.
Единственная важная часть спецификации URI - знать все между первым ?
и первым #
, соответствует определению запроса в спецификации. Он может включать любые символы, например [:/.?]
. Это означает, что допустима строка запроса, например ?bar
или ?ten+green+apples
.
Найдите RFC 3986 здесь
isindex
не имеет смысла HTML5.
Он предоставляется устаревшим для использования только в качестве первого элемента в форме и отправляется без имени.
Если имя записи «isindex», ее тип - «текст», и это первая запись в наборе данных формы, затем добавьте значение к результату и пропустите остальные подшаги для этой записи, переходя к следующей запись, если таковая имеется, или следующий шаг в общем алгоритме в противном случае.
Флаг isindex предназначен только для устаревшего использования. Формы в соответствующих документах HTML не будут генерировать полезные данные, которые необходимо декодировать с помощью этого флага.
В последний раз isindex поддерживался HTML3. Он используется в HTML5 для упрощения обратной совместимости.
Поддержка в библиотеках этого формата URI различается, однако некоторые библиотеки предоставляют устаревшую поддержку для упрощения использования isindex
.
Некоторые библиотеки, такие как Perl URI, предоставляют методы синтаксического анализа структур такого типа.
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
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. Например.:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
генерирует URL-адрес типа:
?bar
Стандарт: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute.
Однако isindex
устарел, как указано на странице: https://stackoverflow.com/a/41689431/895245
Как описано во всех других ответах, это вполне допустимо для проверки, особенно для логических вещей
Вот простая функция для получения строки запроса по имени:
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
и теперь вы хотите проверить, существует ли искомая строка запроса или нет, вы можете сделать простую вещь, например:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
exampleQueryString
будет false
, если функция не может найти строку запроса, в противном случае будет true
.