2010-11-25 8 views
4

HTTP :: ResponseリモートサーバーのPerlオブジェクトで、重複した 'Content-Length'ヘッダーを含むHTTP応答が返されることがあります。HTTP :: Responseで複製されたヘッダーを検出します

これが発生すると、コンテンツの長さの値が「43215」である場合、私はヘッダ値を読み出す場合:

print ($response->header('Content-length')); 

結果は:

4321543215 

私はどうかを検出することができる方法ヘッダーは複製され、実際の値にアクセスできますか?

答えて

11

多値フィールドは、リストコンテキストで別の値として返され、 はスカラコンテキストでセパレータとして「」と連結されます。

、これはリストコンテキストである:

print ($response->header('Content-length')) 

ので、$response->header()がリストとして両方Content-lengthヘッダを返して、その結果が、本質的に、次のとおりです。

print join('', 43215, 43215) 

あなたはどちらかを使用korkの$response->content_length()アプローチまたはアレイ内のすべてのContent-lengthのヘッダを取得し、長さとして最初のものを使用する:

を10
my @lengths = $response->header('Content-length'); 
my $length = $lengths[0]; 

複数のContent-lengthヘッダーを取得すると、それらが異なっていると、誰かが非常に混乱します。

+1

は「誰かが非常に混乱している」 - Webサーバをanthropomorphiseしないでください。あなたがそれをするとき、彼らはそれを憎む! – DVK

1

あなたは、少なくともではない確実に、これを検出することはできません。もちろん途中でヘッダの値を分割し、左の値が右に等しいかどうかを確認しようとしていますが4444のようにサイズを得たとき、それが重複したりていない場合、あなたは知りませんでした。この問題を解決する唯一のチャンスは、あなたがヘッダを重複して送信するアップストリームサーバーでそれを固定しています。

あなたは多分CONTENT_LENGTHプロパティを介してコンテンツの長さにアクセスすることを試みることができる:

$response->content_length 

多分これは、重複したヘッダを認識しているが、私はそれをしようとしませんでした。 HTTP::Headers用微細マニュアルから

+0

それが働い嬉しいおかげで、それはクールな魅力 – ajgarlag

+0

のように動作し、:) –

関連する問題