url中的参数分隔符,误用问号的情况

时间:2012-03-01 17:29:09

标签: http url web

我真正不了解的是使用'?'的好处而不是'&'在网址中:

question mark vs ampersand

如果我们使用不同的角色作为第一个分隔符,它会让任何人的生活更轻松。 你能想出一个合理的解释吗?

编辑:经过更多研究,我发现“&”可以是文件名的一部分(terms& conditions.html)所以“?”是一个很好的分离器。但我还是觉得用“?”对于分隔符来说,生活更轻松(从url生成器和解析器的角度来看):

question mark as separator

使用“&”有什么好处吗?乍一看还不清楚?

3 个答案:

答案 0 :(得分:7)

从URI规范(RFC 3986)的角度来看,这里唯一的分隔符是"?"。查询的格式是不透明的; &符号只是HTML碰巧用于表单提交的内容。

答案 1 :(得分:4)

答案在本文中非常重要 - http://www.skorks.com/2010/05/what-every-developer-should-know-about-urls/。为了突出它,这里是:

  

查询是将某些参数发送到资源的首选方法   服务器。这些是键=值对,并与其余部分分开   的URL由? (问号)字符,通常是分开的   来自彼此(&符号)字符。你可能不知道的是   通过以下方式将它们彼此分开是合法的这一事实;   (分号)字符。以下网址是等效的:

     

http://www.blah.com/some/crazy/path.html?param1=foo&param2=bar

     

http://www.blah.com/some/crazy/path.html?param1=foo;param2

答案 2 :(得分:0)

RFC 3896(https://www.ietf.org/rfc/rfc3986.txt)定义了一般和子分隔符......'?'是一般的,'&'和';'是分。规范很清楚。

在这种情况下后者'?' chars将被视为查询的一部分。如果查询解析器严格遵循规范,则会将整个查询传递给app-destination。如果app-destination可以选择以对待?的方式进一步处理查询字符串?作为param名称 - 值对分隔符,这取决于应用程序的设计者。

我的猜测是,这通常“正常”,因为分割查询字符串的代码和原始uri使用所有分隔符进行匹配:1)第一个查询被拆分为“?”然后2)使用包含'?'的char匹配列表解析查询字符串(仅方便)....这可能已经在无处不在的解析库中发生。