【问题标题】:Parse multiple headers with same name解析具有相同名称的多个标头
【发布时间】:2021-02-12 12:23:16
【问题描述】:

我想在我的应用程序中正确实现标头解析。但是,例如,让我们有如下标题:

HTTP/1.1 200 OK
...
Foo: Bar
Foo: Baz

在这种情况下,使用 getallheaders() 仅返回 Foo => Bar 并且 Baz 值被丢弃。有没有其他方法可以获取所有标头值?

【问题讨论】:

标签: php http-headers


【解决方案1】:

根据this bug report,这似乎取决于您为 PHP 使用的 SAPI。基本问题/陈述是:

如果我提出要求:

GET / HTTP/1.1
Forwarded: for=10.0.0.1,for=20.30.40.50;host=php.net,host=awesome.proxy.com;proto=https,proto=http
Forwarded: for=10.30.20.10;host=second.awesome.proxy.com;proto=http

我根据 SAPI 得到 3 种不同的响应

  • FPM 只保留最后一个标题
  • php -s 只保留第一个标题
  • apache 用 , 连接它们

对票的回应是:

获取标头的能力高度依赖于 SAPI。 Apache 运行良好,但 php -s 只是一个快速开发服务器,并不适合所有用途。

真的,这里的问题是 php-fpm 不能正确处理多个标题。 HTTP 规范要求只有当它们的值可以组合成逗号分隔的列表时才允许使用多个标头,这意味着 $_SERVER 和 getallheaders() 仍然足够。

【讨论】:

    猜你喜欢
    • 2021-11-24
    • 2011-03-15
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    相关资源
    最近更新 更多