2010-11-25 7 views
4

HTTP :: Response 때때로 'Content-Length'헤더가 중복 된 HTTP 응답을 반환하는 원격 서버의 Perl 객체에 문제가 있습니다. 내가 가진 헤더 값 읽을 때 내용 길이 값이 '43215'인 경우이 발생HTTP :: Response에서 중복 된 헤더 감지

:

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 헤더를 잡고 첫 번째 문자를 길이로 사용하십시오 :

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

Content-length 개의 헤더가 여러 개 나오면 누군가가 매우 혼란 스럽습니다.

+1

"누군가는 매우 혼란 스럽네요"- 제발 웹 서버를 응징하지 마십시오. 당신이 그렇게 할 때 그들은 그것을 싫어합니다! – DVK

1

적어도이를 안정적으로 감지 할 수 없습니다. 물론 중간에 헤더 값을 나눌 수 있고 왼쪽 값이 오른쪽 값과 같은지 알아 내려고하지만 4444와 같은 크기가되면 중복되는지 아닌지 알 수 없습니다. 이 문제를 해결할 수있는 유일한 방법은 중복 된 헤더를 보내는 업스트림 서버에서 수정하는 것입니다.

$response->content_length 

어쩌면이 중복 헤더를 알고,하지만 난 그것을 시도하지 않았다 :

당신은 아마 CONTENT_LENGTH 속성을 통해 내용 길이에 접근을 시도 할 수 있습니다. HTTP::Headers 대한 정밀한 매뉴얼에서

+0

감사합니다, 그것은 매력처럼 작동합니다 – ajgarlag

+0

쿨, 다행 :) –