按照现代规范,是的,允许跳过斜线,这与 accepted answer 此处声称的相反。
虽然接受的答案正确引用了 RFC 1738(20 多年前发布!),但它错误地声称 RFC 2396(1998 年发布)需要斜杠,并忽略了 两个 这两个规范都有反过来又被RFC 3986 淘汰,2005 年发布(距离接受的答案还早几年),最近又被WhatWG URL Standard 淘汰,两者都允许省略斜杠。
让我们依次考虑这些规范,从最早到最新:
隐式要求specifying that it may be omitted if the URL contains neither a path nor a query string 包含斜线(此处称为searchpart)。下面的粗体字是我的:
HTTP URL 采用以下形式:
http://<host>:<port>/<path>?<searchpart>
其中<host> 和<port> 如Section 3.1 中所述。如果:<port>
省略,端口默认为80。没有用户名和密码
允许。 <path> 是 HTTP 选择器,<searchpart> 是查询
细绳。 <path> 是可选的,<searchpart> 和它的
前面的“?”。 如果<path> 和<searchpart> 都不存在,则“/”
也可以省略。
这里可以省略斜线。该 RFC 将一些在方案后没有双斜杠的奇怪 URL 语法合法化,但如果我们忽略这些(它们是在规范的 BNF 中带有 opaque_part 的那些)并坚持使用包含host,然后我们发现absoluteURI是这样定义的……
absoluteURI = scheme ":" ( hier_part | opaque_part )
hier_part 看起来像这样:
hier_part = ( net_path | abs_path ) [ "?" query ]
net_path 看起来像这样:
net_path = "//" authority [ abs_path ]
abs_path 又被定义为以斜杠开头。请注意,abs_path 在上述语法中是可选 - 这意味着scheme://authority?query 形式的 URL 是完全合法的。
附录G.2. Modifications from both RFC 1738 and RFC 1808暗示了这一变化的动机:
问号“?”字符已从允许的集合中删除
权限组件中用户信息的字符,因为测试
表明许多应用程序将其视为保留用于分离
来自 URI 其余部分的查询组件。
换句话说 - 现实世界中的代码假设 URL 中的第一个问号,任何地方,都标记了查询字符串的开头,因此规范被务实地更新以与现实保持一致。
同样,可以省略斜线。规范通过说每个包含权限(主机)的 URI 中都需要一个“路径”来表达这一点,并且该路径必须要么以斜杠开头或由没有字符:
3. Syntax Components
通用 URI 语法由一个分层序列组成
称为方案、权限、路径、查询和
片段。
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty
scheme 和 path 组件是必需的,尽管路径可能是
空(无字符)。当权威存在时,路径必须
可以为空或以斜杠(“/”)字符开头。
为了完整起见,请注意path-abempty 稍后是这样定义的:
path-abempty = *( "/" segment )
这确实允许它不包含任何字符。
URL Standard 来自 WhatWG(积极维护的生活标准,于 2012 年首次创建,目标是淘汰 RFC 3986)
同样,省略斜线是可以接受的,尽管这次我们没有 BNF 可看,而是需要阅读大量散文。
Section 4.3 告诉我们:
absolute-URL string 必须是以下之一
任何可选的后跟“?”和一个 URL 查询字符串。
由于 HTTP 和 HTTPS 是 special schemes,任何 HTTP 或 HTTPS URL 都必须满足这三个选项中的第一个 - 即 http: 或 https: 后跟 scheme-relative-special-URL string,其中:
必须是“//”,后跟valid host string,后跟可选的“:”和URL-port string,后跟可选的path-absolute-URL string。
path-absolute-URL string 被定义为以斜杠开头,但在上面的绝对 URL 字符串的定义中是显式可选的;因此,允许从主机直接访问“?”和查询字符串,因此像http://example.com?query 这样的 URL 是合法的。
当然,这些都不能保证每个 Web 服务器或 HTTP 库都会接受此类 URL,也不会将它们视为在语义上等同于包含斜杠的 URL。但就 spec 而言,跳过斜线是完全合法的。