使用没有值的GET参数(在URL中)是一种不好的做法吗?

2022-08-30 19:57:54

我和我的老板就使用没有价值的GET参数的URL发生了一些争论。例如:

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

我经常在网上看到这种链接,但当然,这并不意味着这是一件好事。他担心这不是标准的,可能会导致意想不到的错误,所以他宁愿我使用这样的东西:

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

根据我的经验,我从未遇到过使用空参数的任何问题,它们有时对我来说更有意义(就像在这种情况下,没有任何意义,所以“logout”的值是无关紧要的,我只测试参数服务器端的存在,而不是它的值)。(它看起来也更干净。?logout=no

但是,我找不到确认这种用法实际上是有效的,因此真的不会引起任何问题。

你有关于这个的任何链接吗?


答案 1

RFC 2396,“统一资源标识符 (URI):通用语法”,§3.4,“查询组件”是关于查询字符串的权威信息源,并指出:

查询组件是要由资源解释的信息字符串。

[...]

在查询组件中,保留字符 “;”、“/”、“?”、“:”、“@”、“&”、“=”、“+”、“”,“”和“$”。

RFC 2616,“超文本传输协议 -- HTTP/1.1”,§3.2.2,“http URL”,并没有重新定义这一点。

简而言之,您提供的查询字符串(“注销”)是完全有效的。


答案 2

密钥无需值即可产生任何效果。它也不会降低URL的有效性,URL RFC1738不会将其列为URL的必需部分。

如果你真的不需要一个值,那只是一个偏好问题。

http://example.com/?logout

与有效网址一样有效

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

它所做的所有区别在于,如果您想确保绝对设置了“yes”位,则可以检查其值。喜欢:

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

如果您只想知道密钥是否在 URL 中的某个位置设置,则只需列出未为其分配任何值的密钥就足够了。然后,您可以像这样检查它:logout

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

推荐