我注意到Chrome和Firefox都忽略了网址中字词之间的斜杠。
因此,github.com/octocat/hello-world
似乎等同于github.com//////octocat////hello-world
。
我正在编写一个解析URL并检索其中一部分的应用程序,并且由于这种行为,我能够在不修改代码的情况下返回原始URL,在我的情况下相当方便。我不知道依靠这个怪癖是不是一个好主意。
答案 0 :(得分:18)
路径分隔符根据this定义为单斜杠。 (搜索路径组件)
请注意,浏览器通常不会修改网址。浏览器could append a /
at the end of a URL,但在您的情况下,带有额外斜杠的URL只是在请求中发送,因此 服务器忽略斜杠。
另外,请看一下:
即使这种行为对您来说很方便,也是generally not recommended。此外,缓存也可能会受到影响(source):
由于您的浏览器和服务器都缓存单个页面(根据其缓存设置),通过稍微不同的URI多次请求同一文件可能会影响缓存(取决于服务器和客户端实现)。
答案 1 :(得分:9)
空路径段根据specification生效:
path = path-abempty ; begins with "/" or is empty / path-absolute ; begins with "/" but not "//" / path-noscheme ; begins with a non-colon segment / path-rootless ; begins with a segment / path-empty ; zero characters path-abempty = *( "/" segment ) path-absolute = "/" [ segment-nz *( "/" segment ) ] path-noscheme = segment-nz-nc *( "/" segment ) path-rootless = segment-nz *( "/" segment ) path-empty = 0<pchar> segment = *pchar segment-nz = 1*pchar segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" ) ; non-zero-length segment without any colon ":" pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
在后一个URI https://github.com//////octocat////hello-world
中,路径//////octocat////hello-world
将由以下内容组成:
//////octocat////hello-world
: path-abempty
/
: segment /
: segment /
: segment /
: segment /
: segment /octocat
: segment-nz /
: segment /
: segment /
: segment /hello-world
: segment-nz 删除这些空路径段将构成完全不同的URI。服务器如何处理这些空路径段是一个完全不同的问题。
答案 2 :(得分:6)
实际上浏览器不会忽略它们,它们会在HTTP请求中将它们传递给Web服务器。它可能决定忽略它们的服务器,但技术上乘以斜线会产生不同的URL。
W3.org指定网址的路径部分由&#34;路径段&#34;组成,由/
分隔,路径段由零个或多个&#34; URL单元组成&# 34; (字符)除了/
和?
,因此允许使用空路径段,这是复制斜杠时的结果。
有关详细信息,请参阅http://www.w3.org/TR/url-1/
答案 3 :(得分:3)
实际上,浏览器不会忽略网址之间的斜杠。
如果您在(客户端)JavaScript中使用document.URL
,则会获得带有重复“///”的网址。
同样在(服务器端)PHP中,当使用$_SERVER['REQUEST_URI']
时,您将获得带有重复“///”的URL。
服务器(例如Apache)实际上重定向到没有URL的正确页面。在Apache中,您可以在.htaccess
文件中编写规则,以便不重定向到///被忽略的页面。