【问题标题】:All caps HTTP headers with underscores dropped in Apache 2.4Apache 2.4 中删除了所有带下划线的大写 HTTP 标头
【发布时间】:2013-06-30 16:54:44
【问题描述】:

我有一个依赖于发送全大写和下划线 HTTP 标头以及请求的应用。

Apache 2.4开头,

现在包含无效字符(包括下划线)的标题 默默地放下

This page 建议您可以更改一些设置,这些设置将允许不被剥离的旧 HTTP 标头(即,如果它们在 CURL 中设置,那么它们将显示在 PHP 中的 $_SERVER 数组中)但是它没说怎么做。我尝试将以下内容添加到我的 HTACCESS 文件中,

SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1 RequestHeader 设置 Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding

但它似乎没有帮助。从 Apache 2.2 迁移到 2.4 时,有其他人遇到过这种情况吗?

【问题讨论】:

  • 你检查过mods是否被apache加载(mod_setenvif和mod_header)?
  • @tlenss 是可以在 htaccess 中启用还是必须在 httpd.conf 中设置?我在共享主机上,修改服务器的能力有限。

标签: php apache http http-headers hosting


【解决方案1】:

我遇到了同样的问题,我的 REST api 需要两个自定义标头进行身份验证,CCS_USERNAME 和 CCS_AUTHENTICATION。升级到 Apache 2.4 后,在 $_SERVER 数组中找不到任何标头。

我必须通过以下方式修改我的 htaccess 文件才能解决问题。

SetEnvIfNoCase ^CCS.USERNAME$ ^(.*)$ fix_ccs_username=$1
RequestHeader set CCS-USERNAME %{fix_ccs_username}e env=fix_ccs_username

SetEnvIfNoCase ^CCS.AUTHENTICATION$ ^(.*)$ fix_ccs_authentication=$1
RequestHeader set CCS-AUTHENTICATION %{fix_ccs_authentication}e env=fix_ccs_authentication

两个自定义标题现在都出现在 $_SERVER 数组中。请注意,每个单独的自定义标头都必须有自己的条目,并且您必须为每个条目使用不同的名称。

【讨论】:

    【解决方案2】:

    不确定您对机器有多少访问权限。但是你可以使用 PHP 来检查模块

    print_r(apache_get_modules());
    

    如果你有 mod_setenvif 和 mod_headers 你的 .htaccess 规则应该没问题

    【讨论】:

      【解决方案3】:

      引用的两行将名为 Accept(.*)Encoding 的标头替换为 Accept-Encoding。您必须修改此示例以满足您的标题名称。

      【讨论】:

        猜你喜欢
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多