2015-09-25 109 views
0

我試圖使用PHP庫AS2Secure來接收AS2 MDN。該消息到達並解碼得很好,但當響應消失時,它將從Content-Type中去除主「多部分/有符號」值。AS2Secure從頭部丟棄多部分/有符號內容類型

舉例來說,這樣的事情應該是在主標題指定一個多部分消息:

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, "\n\n") !== false) $content = substr($content, strpos($content, "\n\n") + 2); 

如果我刪除此代碼,缺少Content-Type: multipart/signed線顯示了在人體內,但Content-Type: text/html仍顯示在頁眉。

任何想法?

+0

這是來自合作伙伴系統的MIME頭,是否正確?他們可以改變它嗎? – Andrew

+0

來自合作伙伴系統的MIME頭是'multipart/signed',他們期望得到類似的'multipart/signed'響應。然而,他們從我們的系統獲得的多部分消息的響應是'text/html'。這就像是某些東西在輸出時覆蓋了內容類型的MIME值。 – eComEvo

回答

0

這是由PHP Laravel框架(處理應用程序的路由)在輸出過程中覆蓋標頭造成的。

handle()方法AS2server.php更改此代碼:

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

// output MDN 
echo $mdn->getContent(); 

...這個Laravel友好代碼:

$headers = []; 

foreach ($mdn->getHeaders() as $key => $value) { 
    $headers[str_replace(["\r", "\n", "\r\n"], '', $key)] = str_replace(["\r", "\n", "\r\n"], '', $value); 
} 

return \Response::make($mdn->getContent(), 200, $headers); // Use native Laravel response. 

...問題解決了!