【问题标题】:How can I get request headers in their original format from Rack?如何从 Rack 获取原始格式的请求标头?
【发布时间】:2014-11-13 16:29:44
【问题描述】:

我正在尝试使用 Ruby 从 Rack 获取原始格式的请求标头,但还没有弄清楚。我从 request.env 得到的哈希不是我想要的。在该散列中,标题键被大写并带有下划线而不是破折号,如下所示:

"CONTENT_TYPE"=>"应用程序/json; charset=utf-8"

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

"Content_Type"=>"application/json; charset=utf-8"

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

“X-BT-RequestId”

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

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

有什么想法吗?

【问题讨论】:

  • 你能写一个 Rack 中间件来解决这个问题吗?这是在任何预处理之前使用请求数据的最简单方法。

标签: ruby rack


【解决方案1】:

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

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

您也可以从 handler/webrick.rb 中的 service method 中获取它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 2016-11-16
    • 2021-01-09
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多