为什么这么多 Ruby on Rails 应用程序的 URL 中缺少尾部斜杠?一个例子是http://basecamphq.com/tour。AFAIK 这违反了 Web 标准。这与 RoR 的设置方式有关吗?
7 回答
它不违反 Web 标准。http://basecamphq.com/tour被认为是一个文件,http://basecamphq.com/tour/将是一个目录(注意:两个 URL 不相等,尽管一些网络服务器 - 例如 Apache - 如果一个不存在)。由于两者都是虚拟的,主要由开发人员决定(这与使用的编程语言或框架无关)。
我认为这与缓存无关(如 nilamo 所述),因为有足够的 HTTP 标头用于缓存控制 - 可能是某些反向代理具有不同的默认行为。
你的论点是无效的:
w3c 的 url 规范不强制在 url 上使用斜杠。
这就是它所说的斜线:
路径的解释方式取决于所使用的方案。通常,保留的斜线“/”字符(ASCII 2F hex)表示层次结构中的级别,斜线左侧的较高级别部分。
Rails 很好地遵守了这个指令。
我的头发是一只鸟!
因为尾部斜杠表示一个目录,并且您在 Rails 中访问的不是目录,而是页面。就像您的示例中的 tour.html 一样,除了 .html 可以忽略,因为它是默认值。
我敢说,因为在 RoR 中,您键入的 URL 通常不会映射到目录中的静态文件,而是由 routes.rb 文件动态解析,以斜杠结尾的路径并没有多大意义感觉。
有些喜欢斜线,有些不喜欢。双方都可以进行激烈的辩论。
Rails 使用斜杠作为参数标记分隔符,以及类似的路由
/post/:year/:page
默认情况下匹配/post/2012/a-title和/post/2012/a-title/,除非你做了一些魔术。这与网络标准无关。
从浏览器的角度来看,这两种路径在处理相对资源时有很大的不同。作为对上述 <img src=" image.png "/> 的响应,浏览器将向服务器发送第二个查询:/post/2012/image.png(第一种情况)或/post/2012/a- title/image.png(第二种情况),因为浏览器使用尾部斜杠来解析路径,就好像它们是目录一样。
但是,Rails 开发人员通常不在乎,因为他们在呈现内容时不会显式地编写 URL!他们可以使用 URL 帮助程序,这些帮助程序对他们隐藏了这个逻辑......除非您不使用帮助程序来生成内容,否则您会在意。
这是 URL 重写的一种形式。它不违反网络标准,实际上对可用性有很大帮助,并且已被证明有助于您的搜索引擎排名。这样想吧。
您正在告诉您的朋友您在某人的博客上看到的这篇很酷的帖子。哪个 URL 更容易告诉您的朋友:
或者