Неправильно ли использовать параметр GET (в URL) без значения?

Я немного спорю с моим боссом о URL-адресах, используя параметры GET без значения. Например

http://www.example.com/?logout

Я вижу эту ссылку довольно часто в Интернете, но, конечно, это не значит, что это хорошо. Он опасается, что это не стандарт и может привести к неожиданным ошибкам, поэтому он предпочел бы, чтобы я использовал что-то вроде:

http://www.example.com/?logout=yes

По моему опыту, я никогда не сталкивался с какой-либо проблемой с использованием пустых параметров, и они иногда имеют для меня больше смысла (как в этом случае, где ?logout=no не имеет никакого смысла, поэтому значение «logout» не имеет значения и я бы тестировал только наличие параметра server-side, а не его значение). (Он также выглядит чище.)

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

У вас есть ссылка на это?

RFC 2396, «Унифицированные идентификаторы ресурсов (URI): общий синтаксис», §3.4, «Компонент запроса» является авторитетным источником информации о строке запроса и содержит:

Компонент запроса представляет собой строку информации, которая будет интерпретироваться ресурсом.

[…]

Внутри компонента запроса сохраняются символы «;», «/», «?», «:», «@», «&», «=», «+», «,» И «$».

RFC 2616, «Протокол передачи гипертекста – HTTP / 1.1», §3.2.2, «http URL», не переопределяет это.

Короче говоря, строка запроса, которую вы даете («выход из системы»), совершенно верна.

Значение не требуется для того, чтобы ключ имел какой-либо эффект. Это не делает URL менее справедливым, URL-адрес RFC1738 не перечисляет его как необходимую часть URL-адреса.

Если вам действительно не нужна ценность, это просто вопрос предпочтения.

 http://example.com/?logout 

Является таким же правильным URL-адресом, как и

 http://example.com/?logout=yes 

Вся разница в том, что если вы хотите убедиться, что бит «да» абсолютно настроен, вы можете проверить его значение. Подобно:

 if(isset($_GET['logout']) && $_GET['logout'] == "yes") { // Only proceed if the value is explicitly set to yes 

Если вы просто хотите знать, был ли ключ logout из logout в URL-адресе, достаточно просто перечислить ключ без присвоенного ему значения. Затем вы можете проверить это следующим образом:

 if(isset($_GET['logout'])) { // Continue regardless of what the value is set to (or if it's left empty) 

Это прекрасно, и не вызывает никаких ошибок. Хотя в настоящее время большинство фреймворков основаны на MVC, поэтому в URL-адресе вам нужно указать контроллер и действие , поэтому оно больше похоже на /users/logout (BTW, также StackOverflow использует этот URL для выхода из системы;).

Утверждение, что оно может вызвать ошибки для меня, похоже на то, что ваши приложения вручную обращаются к необработанному $_GET , и я определенно считаю, что создание приложений без рамки (которая обычно предоставляет стек MVC и маршрутизатор / диспетчер) является настоящей опасной вещью здесь.