为什么 php slim headers 已经串联了?

Why php slim headers are already concatenated?

我需要将一些 header 放在 HttpUrlConnection 中,以便使用 Slim 框架(版本 3)将它们发送到用 PHP 编写的 Web 服务器。

当我在连接中放置更多具有相同密钥的 header 时,我遇到了麻烦。 例如:

HttpUrlConnection conn = createConnectionSomeHow();
conn.addRequestProperty("myHeader", "value1");
conn.addRequestProperty("myHeader", "value2");

如果我在 conn.getRequestProperties() 上使用 watch,我会看到一个带有键 "myHeader" 的单个 header 和一个包含 2 个元素的列表作为价值。如我所愿

但是我的网络服务器接收效果不佳header。

如果我写:

$values = $request->getHeader('myHeader');

$values 不是包含 2 个元素的列表,它是包含值 "value1, value2" 的 1 个元素的列表,也就是说,2 个值连接在一个字符串中。 这真的很奇怪。我从 Slim documentation:

You can get a single header’s value(s) with the PSR 7 Request object’s getHeader($name) method. This returns an array of values for the given header name. Remember, a single HTTP header may have more than one value!

有一种方法可以自动连接 header 的值,称为 getHeaderLine。我不是在打电话。我打电话给 getHeader.

这种行为是否正确?我是不是弄错了什么?

收获不错。这实际上是一个错误。

我为此创建了一个 issue at the Slim Github project

作为解决方法,您可以自己拆分 header:

$values = explode(',', $request->getHeaderLine('myHeader'));