WEBrick忽略坏主机组件

时间:2016-03-26 01:35:30

标签: ruby

有没有办法忽略Webrick中错误的主机组件?

我在localhost:3000上运行Sinatra / Rack服务。此服务向在localhost上运行的服务外观服务注册; service-facade将分配一个URL app-key.1:1111,它将被路由到我的应用程序localhost:3000。因此,允许客户端能够通过服务外观与我的服务进行通信,而无需知道我的服务的主机+端口。问题是,service-facade在标头中使用了错误的HOST(它使用app-key.1主机+端口而不是localhost:3000)而且我被告知管理服务外观的人是不容易改变这个标题。

为了提供更多细节,service-facade被编写为Java应用程序。它从请求中获取标头,然后将其重新转发到资源服务器。因此,您可能会认为只要客户端与service-facade交谈时在主机头中使用了正确的HOST,那么一切都会起作用;但是,这会破坏service-facade的目的,因为客户端需要事先知道资源服务器的主机。

如果我在任何主机检查发生之前以某种方式挂钩,我可以修复它。有趣的是,由于某种原因,Tomcat似乎并不关心这个主机检查,所以我们使用这个服务的Java应用程序似乎不会遇到这个问题。

有没有办法在WEBrick中绕过这个检查?或者也许我可以以某种方式添加主机名,以便WEBrick也接受作为有效的主机?

具体检查是:/Users/bliu/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/uri/generic.rb:605中的异常`URI :: InvalidComponentError' - 坏组件(预期的主机组件):api_key.1

def check_host(v)
  return v unless v

  if @opaque
    raise InvalidURIError,
      "can not set host with registry or opaque"
  elsif parser.regexp[:HOST] !~ v
    raise InvalidComponentError,
      "bad component(expected host component): #{v}"
  end

  return true
end

0 个答案:

没有答案