Допустим ли параметр url-запроса, если он не имеет значения?


- Это URL-адрес, как http://example.com/foo?bar действует?

Я ищу ссылку на что-то официальное, что говорит один или другой. Простой ответ "Да / нет" или анекдотические доказательства не сократят его.

8 92

8 ответов:

  • действительно для URI RFC
  • вероятно, приемлемо для вашей серверной платформы / кода

The URI RFC не определяет формат строки запроса. Хотя признается, что строка запроса часто будет содержать пары имя-значение, это не обязательно (например, она часто будет содержать другой URI).

3.4. Запрос

компонент запроса содержит неиерархические данные, которые наряду с данные в компоненте пути (раздел 3.3), служит для определения ресурс в рамках схемы URI и полномочий именования (если таковые имеются). ...

... Однако в качестве компонентов запроса часто используются для переноса идентифицирующей информации в виде пары "ключ=значение" и одно часто используемое значение является ссылкой на еще один Ури,...

HTML устанавливает, что форма, отправленная через HTTP GET, должна кодировать значения формы как пары имя-значение в форме"?key1=value1&key2=value2..."(правильно закодировано). Разбор строки запроса зависит от кода на стороне сервера (например, Java servlet engine).

вы не определяете, какой серверный фреймворк вы используете, если таковой имеется, но возможно, что ваш серверный фреймворк может предположить, что строка запроса всегда будет в парах имя-значение, и она может подавиться строкой запроса, которая не находится в этом формате (например,?bar). Если это ваш собственный пользовательский код, анализирующий строку запроса, вы просто убедитесь, что вы обрабатываете этот формат строки запроса. Если это фреймворк, вам нужно будет проконсультироваться с вашей документацией или просто протестировать ее, чтобы увидеть, как она обрабатывается.

Они вполне допустимы. Можно было бы считать их эквивалентом большого мускулистого парня, молча стоящего позади гонца толпы. Парень не имеет имени и не говорит, но само его присутствие передает информацию.

"схема "http" используется для поиска сетевых ресурсов по протоколу HTTP. В этом разделе определяется специфичный для схемы синтаксис и семантика для URL-адресов http."http://www.w3.org/Protocols/rfc2616/rfc2616.html

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] 

Так что да, все допустимо после вопросительного знака. Ваш сервер может интерпретировать по-разному, но анекдотически, вы можете видеть, что некоторые языки рассматривают это как логическое значение, которое истинно, если оно указано.

Да, действительно.

Если вы просто хотите проверить, существует ли параметр или нет, это один из способов сделать это.

URI Spec

единственная соответствующая часть спецификации URI должна знать все между ? и первый # соответствует определению спецификации запроса. Он может включать любые символы, такие как [:/.?]. Это означает, что строка запроса, например ?bar или ?ten+green+apples действителен.

найти RFC 3986 здесь

HTML Spec

isindex не имеет смысла HTML5.

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

если имя записи - "isindex", ее тип - "text", и это первая запись в наборе данных формы, затем добавьте значение для результата и пропустите остальные подэтапы для этой записи, перейдя к следующей записи, если таковая имеется, или к следующему шагу в общем алгоритме в противном случае.

флаг isindex предназначен только для устаревшего использования. Формы в соответствующие документы HTML не будут генерировать полезные нагрузки, которые необходимо декодировать с помощью этого набора флагов.

в последний раз isindex был поддержан был HTML3. Это использование в HTML5, чтобы обеспечить более легкую обратную совместимость.

поддержка в библиотеках

поддержка в библиотеках для этого формата URI варьируется, однако некоторые библиотеки предоставляют устаревшую поддержку для облегчения использования isindex.

Perl URI.pm (специальный поддержка)

некоторые библиотеки, такие как URI Perl предоставить методы разбора такого рода структур

$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.

узел.js url (без специальной поддержки)

как еще один гораздо более частый пример,node.js принимает обычный маршрут и облегчает разбор как либо

  • строка
  • или объект ключей и значений (используя parseQueryString)

большинство других API URI-parsing после чего-то похожего на это.

isindex из 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);

the exampleQueryString будет false если функция не может найти строку запроса, в противном случае будет true.