是吗?&允许在URL中

时间:2017-02-15 15:53:47

标签: javascript url

我正在审核一些代码,我看到了类似的内容:

if (result.indexOf('?') === -1) {
    result += '?';
}
result += '&' + SOMETHING;

显然,这可能会产生类似此http://example.com?&a=b

的网址

代码的作者在代码中没有看到任何异常,但?& 困扰我。我在RFC中找不到任何限制来证明他的错误(或者我错过了它)。

显然,在Chrome开发者工具的网络标签中,它显示为空对: enter image description here

这样的网址应该打扰我还是我只是偏执狂?

2 个答案:

答案 0 :(得分:6)

这种情况将被大多数服务器解释为空值,所以是的,它确实有效。将要发生的是服务器在?和每个&之间进行检查,然后相应地分离=处的值。

因此,当?&(或两个&)之间没有任何内容时,这些值都将为空。缺少=将影响值是“”还是null,但不会使查询无效。

注意这一点,因为一些解析器可能不会发现它有效,所以在使用自定义解析器时可能会遇到问题(例如在JavaScript中)。

答案 1 :(得分:4)

几年前我写了a blog post关于其中一些边缘案例的文章。

tl; dr:是的,?&example有效

重要的是,您要定义""的密钥,其值为null

你几乎可以保证几乎没有库支持那些空字符串键,所以不要依赖它们工作,但是就?&foo=bar行的URL而言,访问时应该没问题foo密钥。