AS2Secure从报头中删除多部分/签名内容类型



我正在尝试使用PHP库AS2Secure接收AS2 MDN。消息到达并解码很好,但是当响应发出时,它从Content-Type中剥离主要的"multipart/signed"值。

例如,在主标题中应该有这样的内容来指定多部分消息:

Content-Type: multipart/signed; boundary="----=_Part_8f23d0b4-8a42-4946-9928-4d12d9f7fc66.63"; protocol="application/pkcs7-signature"; micalg=SHA1

然而,当多部分消息的响应发出时,我只在主标头中看到这个:

Content-Type: text/html; charset=UTF-8

这会在远程服务器中触发一个错误,远程服务器期望消息将其内容类型指定为multipart。

我跟踪了多部分内容类型的剥离,直到AS2MDN.php中的以下代码:

// TODO : replace with futur AS2MimePart to separate content from header
if (strpos($content, "nn") !== false) $content = substr($content, strpos($content, "nn") + 2);

如果我删除这段代码,缺失的Content-Type: multipart/signed行显示在正文中,但Content-Type: text/html仍然显示在标题中。

任何想法?

这是由PHP Laravel框架(处理应用程序的路由)在输出时覆盖头文件引起的。

AS2server.php中的handle()方法中更改此代码:

ob_end_clean();
// send headers
foreach ($mdn->getHeaders() as $key => $value) {
    $header = str_replace(["r", "n", "rn"], '', $key . ': ' . $value);
    header($header);
}
// output MDN
echo $mdn->getContent();

…到这个Laravel友好的代码:

$headers = [];
foreach ($mdn->getHeaders() as $key => $value) {
    $headers[str_replace(["r", "n", "rn"], '', $key)] = str_replace(["r", "n", "rn"], '', $value);
}
return Response::make($mdn->getContent(), 200, $headers); // Use native Laravel response.

…问题解决了!

最新更新