为什么许多Ruby on Rails应用程序缺少尾部斜杠?

3
为什么很多Ruby on Rails应用程序在其URL中缺少尾部斜杠?一个例子是http://basecamphq.com/tour。据我所知,这违反了Web标准。这与RoR的设置有关吗?

我没有答案,但我记得从某个地方得知,如果一个页面有尾随斜杠,则浏览器不会将其缓存,因为它们将其视为“目录”。也许没有斜杠可以帮助促进缓存...? - nilamo
8
你为什么认为这违反了网页标准? - harms
如果人们要给负评,请留下评论说明原因。 - Jeremy Roberts
关于完整的Rails路由文档(虽然不是很相关,但您可能想了解Rails的工作原理),请参见此处: http://guide.rails.info/routing.html - Nicolas Goy
1
我认为这个问题不应该被踩。虽然有点缺乏了解,但它是一个合理的问题。 - John Topley
好的,我接受这不违反Web标准。谢谢提供信息。 - Andrew
7个回答

12

这并不违反Web标准。http://basecamphq.com/tour被视为文件,http://basecamphq.com/tour/则是目录(注意:虽然一些Web服务器 - 如Apache - 如果一个不存在会检查另一个)。由于两者都是虚拟的,这主要取决于开发人员决定(这与所用的编程语言或框架无关)。

我认为这与缓存无关(如nilamo所提到的),因为有足够的HTTP头来进行缓存控制 - 但也可能一些反向代理有不同的默认行为。


:trailing_slash - 如果为true,则添加尾随斜杠,例如“/archive/2005/”。请注意,目前不建议这样做,因为它会破坏缓存。来源于http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-url_for。我不确定他们的意思是什么,可能是在谈论Rails缓存。 - jshen

5

你的论点是无效的:

w3c的url规范不强制要求在url末尾添加斜杠。

以下是该规范对斜杠的说明:

路径的解释取决于所使用的协议。一般来说,保留的斜杠“/”字符(ASCII 2F hex)表示层次结构中的一级,左边是更高级别的部分。

Rails相当遵循这个指令。

我的头发是一只鸟!


2
由于末尾斜杠表示目录,而在Rails中您不是访问目录,而是页面。这就像您示例中的tour.html一样,只是可以忽略.html,因为它是默认值。

1
我敢说,在RoR中,你键入的URL通常不会映射到目录中的静态文件,而是由routes.rb文件动态解析,因此在路径末尾添加斜杠并没有太多意义。

0

有些人喜欢斜杠,有些人不喜欢。两种方式都有其支持者。


0
Rails使用斜杠作为参数令牌分隔符,路由如下:
/post/:year/:page

默认情况下,/post/2012/a-title/post/2012/a-title/都匹配,除非你进行一些魔法这与Web标准无关。

从浏览器的角度来看,处理相对资源时,这两个路径非常不同。在响应上述内容并使用<img src="image.png"/>时,浏览器将向服务器发送第二个查询:/post/2012/image.png(第一种情况)或/post/2012/a-title/image.png(第二种情况),因为浏览器使用尾部斜杠将路径解析为目录。

然而,Rails开发人员通常不关心这个问题,因为他们在呈现内容时不会显式地编写URL!他们可以使用URL助手来隐藏这个逻辑...除非您不使用助手来生成内容,那么您就需要关注这个问题。


-3

我不确定这真正解决了手头的问题。 它提到了“URL重写”,但是提供了一个以斜杠结尾的示例URI。 问题是为什么有时缺少尾随斜杠。 - coderjoe
Rails中的路由机制与URL重写无关。 - carlosayam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接