Ruby 1.8.7 / Rails 2.3.4 - 在IPv6环境中request.host如何?

时间:2013-05-22 20:07:27

标签: ruby-on-rails ipv6

我们目前正在Rails中进行本地IP地址检测(使用ifconfig,tracepath等),以访问与Rails在同一台计算机上托管的图表应用程序。在Rails启动期间检测到“自身IP地址”,仅执行一次。假设用户可以使用主机名和IP地址访问Apache / Rails服务器,我是否可以安全地使用request.host(在用户登录应用程序后)在<img>标记中创建URL(在IPv4和IPv6环境中,图表应用程序返回的图像本质上是什么?目前它适用于IPv4地址,如下所示:

class ApplicationController < ActionController::Base
    CHARTS_BASE = ''
    def set_chart_url
      chart_url = MYAPP_CONFIG["chart_base"]
      chart_url.gsub!("$chart_host", request.host)
      CHARTS_BASE.replace(chart_url + 'charts?')
    end

class ReportController < ApplicationController
  before_filter :set_chart_url

查看:

<div>
  <img src="<%=CHARTS_BASE + @opt_graph-%>" alt="Graph"/>
</div>

IPv6会做同样的工作吗?使用URL中的主机名或IPv6地址连接到Rails时,request.host在IPv6环境中的样子是什么?

我认为任何已经在IPv6环境中运行Rails的人都可以验证上述内容。感谢。

1 个答案:

答案 0 :(得分:1)

IPv6地址在括号中给出。

我刚刚生成了一个简单的hello world控制器并添加到其视图中:

<%= request.host %>

然后我使用rails server -b ::启动了webrick,然后在浏览器中访问了http://[2001:db8:38c3:1189:c8d3:210f:f297:ba13]:3000/。输出是:

  

主页#索引

     

在app / views / home / index.html.erb

中找到我      

[2001:DB8:38c3:1189:c8d3:210F:F297:BA13]


请注意,request.host包含HTTP Host标头的内容。因此,您可能会在此处看到主机名或IPv4地址。在任何情况下,您都应该能够按原样使用它来构建URL。