【问题标题】:Determining the HTTP port from within a Rack request从 Rack 请求中确定 HTTP 端口
【发布时间】:2012-07-15 13:28:38
【问题描述】:

我正在开发一个 Sinatra 网络应用程序,我想在那里规范化和绝对化许多 URL。为此,我使用了 Rack::Request 对象:

before do
  @cached_request = Rack::Request.new(env)
end

def absolutize(path)
  u = URI.parse('/%s' % path) # Ensure leading slash is there
  u.scheme =  @cached_request.scheme
  u.host =  @cached_request.host
  u.port =  @cached_request.port
  u.to_s
end

但是,即使我的应用程序在端口 9393 上运行,SERVER_PORT 变量也有 80。我已经检查了 env 对象的相关信息,但似乎没有关于请求端口的任何信息。

我应该如何从应用程序中找出这个?我没有在机架规范中看到对变量的引用...

到目前为止,我已经尝试在 Puma 和 Webrick 上运行 rackup 文件。

【问题讨论】:

标签: ruby rack


【解决方案1】:

好的,我想通了。这只发生在通过 MarsEdit 完成的请求时,因为 MarsEdit 不会在 Host 标头中发送端口后缀(几乎所有 Rack 服务器都使用它来推断服务器端口)。

我已与 Daniel 联系并提交了错误报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多