【问题标题】:What is the difference between _url and _path while using the routes in rails在rails中使用路由时_url和_path有什么区别
【发布时间】:2011-01-21 23:22:37
【问题描述】:

当我们在routes.rb 中使用map.some_link 之类的名称定义路由时。我们可以通过两种方式使用链接-some_link_urlsome_link_path

  • 两者有什么区别?
  • 使用哪个更安全?

【问题讨论】:

    标签: ruby-on-rails routes


    【解决方案1】:

    我有同样的问题,我写了a small post about this in my blog

    原因总结在这里(我在论坛上找到的):

    *_path 用于视图,因为 ahref 隐式链接到当前 URL。所以一遍又一遍地重复它会浪费字节。但是,在控制器中,redirect_to 需要 *_url,因为 HTTP 规范要求 3xx 重定向中的 Location: 标头是完整的 URL。

    Here is another explanation 表示这取决于我们在从非 SSL 站点链接到 SSL 站点时是否需要使用绝对 URI,反之亦然。

    到目前为止,我所阅读的内容并不表明它们中的任何一个都比另一个更安全。这真的归结为“正确”的用法。

    【讨论】:

    • 非常感谢。发现它很有用。所以在控制器中我们使用“_url”,而在视图中我们可以使用“_path”,尽管“_url”仍然可以在那里使用。
    • 控制器不需要使用 *_url,路径也可以。在显示到外部来源的路线时,您应该只使用_url
    • 澄清更多:_path 输出同样适用于重定向中的Location 标头。浏览器会将其解释为相对于根的重定向。
    • 答案中的引用不正确。 _path 在控制器中工作。
    • 您博客文章的 URL 是 404'ing。你能更新链接吗?
    【解决方案2】:

    path 是相对的,url 是绝对的。

    【讨论】:

    • 相当简洁。我喜欢简洁。 ;) +1
    • 完美。在控制器(服务器端)中需要使用 _url 并且在视图(浏览器端)中使用 _path。
    • 简短的回答 +1
    【解决方案3】:

    一个名为“用户”的资源的差异示例:

    users_url # => http://localhost:3000/users
    users_path  # => /users
    

    【讨论】:

      【解决方案4】:

      答案与 Petros 相同,但 modern browsers handle relative redirects just fine 除外。 (我会评论他的回答,但我还不能。)

      【讨论】:

        【解决方案5】:

        如果您的意思是不公开所有传递的数据,那么 _path 会更好,因为它会生成一个相对 url,类似于 '/login' 但 _path 会给出 'http://localhost:3000/login'。请参阅我发现的这篇博客文章。 When _url is better than _path

        【讨论】:

        • 恐怕这是不正确的。出于安全原因使用 _path 不会提供任何安全性。这相当于说 Web 服务器的 IP 地址应该保密,因为一个简单的 DNS 请求会显示此信息。
        • 同样,上面给出的关于为了安全而隐藏主机和端口“localhost:3000”的示例是不正确的。使用广泛可用的软件网络扫描工具很容易发现这些信息。
        【解决方案6】:

        _url 将给出整个路径。由于它包含域名和协议,因此您可以将其用于例如。发送电子邮件或重定向到另一个域等。

        _path 将返回 '/' 之后的路径,没有域,协议等。所以你可以不时使用它(我猜),你不需要域的详细信息。

        【讨论】:

          【解决方案7】:

          _url 帮助器生成一个包含整个 URL 的字符串,而 _path 帮助器生成一个包含应用程序根目录的相对路径的字符串,例如:

          photos_url  # => "http://www.example.com/photos"
          photos_path # => "/photos"
          

          根据Rails Guides - Routing

          【讨论】:

            猜你喜欢
            • 2012-08-10
            • 1970-01-01
            • 2011-12-21
            • 2016-06-24
            • 2014-09-05
            • 1970-01-01
            • 2014-06-29
            • 2011-04-22
            • 2014-04-20
            相关资源
            最近更新 更多