我们目前正在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的人都可以验证上述内容。感谢。
答案 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。