perl - 删除了自定义 HTTP header 字段

标签 perl apache http-headers cgi single-sign-on

我的公司销售部署为设备的基于 LAMP(其中 P = Perl,而不是 PHP)的应用程序。一位客户试图将他们的 SiteMinder SSO 与我们的应用程序集成,这样我们的设备就位于代理后面,运行 SiteMinder Apache 插件,充当看门人。对于通过 SSO 对用户进行身份验证的应用程序,我们希望看到包含 SSO cookie(在本例中为 SMSESSION)和包含用户名的自定义 HTTP header 变量的 HTTP 请求。

但是,当我们的 Apache 服务器接收到来自 SSO 代理的 HTTP 请求时,尽管存在 cookie,但所有自定义 HTTP 似乎都已被剥离。我已检测 Perl 代码,使用以下代码将 header 写入日志文件:

my $q = new CGI;
...
my %headers = map { $_ => $q->http($_) } $q->http();
my $headerDump = "Got the following headers:\n";
for my $header ( keys %headers ) {
    $headerDump = $headerDump . "$header: $headers{$header}\n";
}
kLogApacheError("info", $headerDump);

...这是我得到的输出(为保密稍作编辑):
[Wed Mar 16 23:47:31 UTC 2011] [info] Got the following headers:
        HTTP_COOKIE: s_vi=[CS]v1|26AE2FFD851D091F-4000012E400035C5[CE]; s_nr=1297899843493; [snip]
        HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.8
        HTTP_ACCEPT_ENCODING: gzip,deflate,sdch
        HTTP_CONNECTION: keep-alive
        HTTP_ACCEPT: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
        HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.3
        HTTP_USER_AGENT: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13
        HTTP_HOST: [redacted].com

IOW,我期望的客户 HTTP header 丢失了。当我们将流量从代理重定向到不同的 Apache 服务器(即不是我们的设备)时,所有 20 多个自定义 header 都按预期显示。这强烈表明是我们的 Apache 服务器正在剥离 header 。

我们从未在其他部署中遇到过这样的问题,即使使用这个特定的 SSO 解决方案也是如此。我意识到这类似于本网站上的另一个问题( Server removes custom HTTP header fields ),但那里的建议(例如由运行 mod_security 引起的问题)不适用。

我们的服务器可能会剥离 HTTP header ,还有其他原因吗?或者可能有其他事情发生?

谢谢你的帮助!

马特

最佳答案

您是否嗅探过代理和 Apache 实例之间的原始 HTTP 流量?如果此处缺少必要的 header ,则问题出在代理端。

关于perl - 删除了自定义 HTTP header 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5343185/

相关文章:

regex - 如何使用 Perl 执行多次替换?

performance - apache 服务器达到 MaxClients 设置,考虑提高 MaxClients 设置

apache - 一个 IP 地址和端口上的多个 SSL Namebased 多个虚拟主机

Django 管理站点未显示 CSS 样式

http - 带有 "If-Match"和 ETag 的 GET 请求

security - 内容安全策略报告-uri 未被识别

node.js - Node Express res.set() 不起作用

perl - 如何检查 Unix 进程是否在 Perl 中运行?

regex - 无法从文件中获取正确的输出

perl - 拆分后存储 token