如何从Rack获取原始格式的请求标头?

时间:2014-11-13 16:29:44

标签: ruby rack

我正在尝试使用Ruby从Rack获取其原始格式的请求标头,但尚未弄清楚它。我从request.env回来的哈希不是我想要的。在该哈希中,标题键是upcased并具有下划线而不是破折号,如下所示:

“CONTENT_TYPE”=>“application / json; charset = utf-8”

我想要的是标题在处理之前,我正在寻找:

“Content_Type”=>“application / json; charset = utf-8”

我可以很容易地通过request.env循环查找以HTTP_开头的标题并拆分它们,将每个单词和gsub大写,用短划线替换下划线,使它们变成我想要的格式。在处理诸如以下的标题时,以这种方式保留原始格式变得更加棘手:

“X-BT-的requestId”

我觉得我应该能够以某种方式获得预处理的标题。

我正在编写一个HTTP侦听器,它将包装请求并将其转发到另一个服务,并且我希望以原始格式保留标头。我知道标题应该不区分大小写,但如果我能以原始格式转发它们,我希望以后在数据库用户根据这些标题查询值时防止出现区分大小写的问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以从WEBrick :: HTTPRequest的raw_header实例变量中获取webrick/httpserver.rb中的原始标头:

p req.instance_variable_get("@raw_header")
si.service(req, res)

您也可以从处理程序/ webrick.rb中的service method内部获取它。