我正在审核一些代码,我看到了类似的内容:
if (result.indexOf('?') === -1) {
result += '?';
}
result += '&' + SOMETHING;
显然,这可能会产生类似此http://example.com?&a=b
的网址代码的作者在代码中没有看到任何异常,但?& 困扰我。我在RFC中找不到任何限制来证明他的错误(或者我错过了它)。
这样的网址应该打扰我还是我只是偏执狂?
答案 0 :(得分:6)
这种情况将被大多数服务器解释为空值,所以是的,它确实有效。将要发生的是服务器在?
和每个&
之间进行检查,然后相应地分离=
处的值。
因此,当?
和&
(或两个&
)之间没有任何内容时,这些值都将为空。缺少=
将影响值是“”还是null,但不会使查询无效。
注意这一点,因为一些解析器可能不会发现它有效,所以在使用自定义解析器时可能会遇到问题(例如在JavaScript中)。
答案 1 :(得分:4)
几年前我写了a blog post关于其中一些边缘案例的文章。
tl; dr:是的,?&example
有效
重要的是,您要定义""
的密钥,其值为null
。
你几乎可以保证几乎没有库支持那些空字符串键,所以不要依赖它们工作,但是就?&foo=bar
行的URL而言,访问时应该没问题foo
密钥。