2013-11-03 6 views
0

나는 우분투 12.04 시스템 apache2에서 실행 중이며 응답 헤더를 가지고 놀고 있습니다. http 응답 헤더, 특히 Content-Length 헤더의 동작을 변경하려고합니다. 내가 실행하는 경우

Header set Static-Header "Static Content with nonsense"
Header set Content-Length "1338"

컬 -I 로컬 호스트 내가 예상되는 헤더 필드 콘텐츠 길이를 얻을 : 나는 IfModule의 mod_headers.c 섹션에서 내 apache2.conf의에서 다음 행을 추가 해봤 1338 (curl -I는 HEAD 요청을 수행함).
curl -i을 실행하면 Content-Length가 올바르게 계산됩니다.
RFC2616에서 9.4 절은 HEAD 요청이 GET 요청에 대한 응답으로 보낸 정보와 동일해야한다고 설명합니다.
누군가이 동작을 설명 할 수 있습니까?!Apache2 : 응답 헤더 변경

답변

0

Apache2는 실제로 콘텐츠를 제공 할 때 콘텐츠 길이를 처음부터 계산합니다. PHP를 사용하여 해당 헤더를 변경하면 동일한 동작을 경험하게됩니다. Content-Length가 서버가 적용된 후 전송되는 컨텐츠의 길이와 일치하는지 확인하는 데 필요합니다 (예 : 압축 (mod_deflate가 활성 인 경우)).

콘텐츠를 전송하는 모든 요청에서 해당 헤더의 변경 사항이 무효화됩니다. 그러나 Apache는 헤드 요청 (메타 데이터 만 포함)의 내용도 보지 않으므로 내용 길이를 계산하지 않습니다. HEAD 요청에는 본문이 없으므로 유효하며 content-length는 항상 0입니다. 따라서

, 당신이해야합니다
이 A) 처음
b)는 HEAD에 대한 하나의 요청을 보낼 수 없습니다에 Content-Length 헤더를 수정하지

+0

당신은 컨텐츠 -를 수정할 수 없습니다 '말할 때 무엇을 의미합니까 길이 머리글 '처음? 일반적으로 Content-Length 헤더를 수정하지 말아야한다는 것을 의미합니까? 서버 헤더를 변경하여 작동하는지 만 확인하려했으나 아무 효과가 없지만 변경되었습니다. 기존 HTTP 응답 헤더를 변경할 수 있습니까? (왜 이것이 합리적인 지 토론하고 싶지는 않습니까?) – psm1k3

+0

정확히 무슨 뜻인지, 맞습니다. 웹 서버는 자신의 콘텐츠 길이를 계산할 수 있어야합니다. 콘텐츠 길이의 경우 아파치 (다른 소프트웨어에 대한 확신이 다른 것은 아닙니다. 다르게 동작 할 수도 있음)는 항상 수행됩니다 (헤더가 전송되는 본문의 크기와 일치하며 특히 청크 분할 인코딩의 경우 HTTP 전송에 중요합니다). 해당 특정 헤더를 덮어 씁니다. –