【问题标题】:Display or get the HTTP header attributes in Rails 4在 Rails 4 中显示或获取 HTTP 标头属性
【发布时间】:2015-09-04 19:19:17
【问题描述】:

我有一个在 Rails 中开发的应用程序,我正在尝试查看 HTTP 标头中的属性。

有没有办法读取这些属性?它们存储在哪里?

有人提到了request.headers。它是否正确?我无法看到此数组中的任何属性。

【问题讨论】:

    标签: ruby-on-rails ruby rails-api


    【解决方案1】:

    request.headers 不返回哈希值,而是返回 ActionDispatch::Http::Headers 的实例,它是机架环境的包装器。

    ActionDispatch::Http::Headers 实现了许多方法,例如 [][]=,这使得它的行为类似于哈希,但它不会覆盖默认的 inspect,因此您无法通过仅查看键值对ppp 它。

    但是,您可以在 rack env 中查看请求标头:

    pp request.headers.env.select{|k, _| k =~ /^HTTP_/}
    

    请记住 rack env 中的请求标头是原始 http 请求标头的 upcased、underscored 和 HTTP_ 前缀版本。

    更新

    实际上有一组有限的请求标头没有前缀HTTP_。这些(大写和带下划线的)标题名称存储在ActionDispatch::Http::Headers::CGI_VARIABLES 中。我在下面列出它们:

        AUTH_TYPE
        CONTENT_LENGTH
        CONTENT_TYPE
        GATEWAY_INTERFACE
        HTTPS
        PATH_INFO
        PATH_TRANSLATED
        QUERY_STRING
        REMOTE_ADDR
        REMOTE_HOST
        REMOTE_IDENT
        REMOTE_USER
        REQUEST_METHOD
        SCRIPT_NAME
        SERVER_NAME
        SERVER_PORT
        SERVER_PROTOCOL
        SERVER_SOFTWARE
    

    所以列出请求标头的完整版本是

    pp request.headers.env.select{|k, _| k.in?(ActionDispatch::Http::Headers::CGI_VARIABLES) || k =~ /^HTTP_/}
    

    【讨论】:

    • 我有点困惑,因为我不断得到所有以HTTP 为前缀的属性,为什么我不能用response['Cache-Control'] 之类的东西访问它
    • @user3433309 您绝对可以访问像request.headers['Authorization'] 这样的请求标头。正是出于这个原因,Rails 封装了 rack env。大家可以看一下ActionDispatch::Http::Headers的源码,很简单。
    • 我可以使用request.headers.env['HTTP_X_PROVIDER_SIGNATURE']request.headers['X-Provider-Signature'] 访问一个属性,在我的例子中是一个OAuth2 签名。一个 Rails5 应用程序。
    【解决方案2】:

    这段代码解决了我的问题request.env["HTTP_MY_HEADER"]。诀窍是我必须在标题名称前加上HTTP

    【讨论】:

    • 看起来request.headers['HTTP_MY_HEADER'] 也可以。
    【解决方案3】:

    我注意到在 Rails 5 中,他们现在希望请求中的标头可以这样拼写:

    Access-Token

    在他们被转化为之前:

    HTTP_ACCESS_TOKEN

    在 Rails 中。执行ACCESS_TOKEN 将不再有效。

    【讨论】:

      【解决方案4】:

      您可以在控制器中使用 @_headers 查看实际 http 标头的哈希值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-11
        • 2019-09-24
        • 1970-01-01
        • 2013-11-01
        • 2019-12-26
        • 2015-08-16
        • 1970-01-01
        • 2018-04-09
        相关资源
        最近更新 更多