Php 解析具有相同名称的多个标头

Php 解析具有相同名称的多个标头,php,http-headers,Php,Http Headers,我想在我的应用程序中正确实现头解析。但是,例如,让我们使用如下标题: HTTP/1.1 200 OK ... Foo: Bar Foo: Baz 在这种情况下,使用getallheaders()只返回Foo=>Bar,并删除Baz值。是否有其他方法获取所有标题值?根据,这似乎取决于用于PHP的SAPI。基本问题/声明是: 如果我提出要求: 基于SAPI,我得到了3种不同的回答 FPM只保留最后一个标题 php-s只保留第一个标题 apache将它们与 对罚单的回应是: 获取标题的能力高度依

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

HTTP/1.1 200 OK
...
Foo: Bar
Foo: Baz
在这种情况下,使用
getallheaders()
只返回
Foo=>Bar
,并删除Baz值。是否有其他方法获取所有标题值?

根据,这似乎取决于用于PHP的SAPI。基本问题/声明是:

如果我提出要求:

基于SAPI,我得到了3种不同的回答

  • FPM只保留最后一个标题
  • php-s只保留第一个标题
  • apache将它们与
对罚单的回应是:

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

实际上,这里的问题是php fpm不能正确处理多个头。HTTP规范要求仅当多个头的值可以组合到逗号分隔的列表中时才允许使用多个头,这意味着$\u SERVER和getallheaders()仍然足够


听起来这取决于它运行的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