문제

HTTP 서버는 컨텐츠 분석을 사용하여 클라이언트의 단일 URL ID 또는 GZIP 인코딩을 제공합니다. Accept-Encoding 헤더.

이제 클라이언트와 HTTPD 간의 오징어와 같은 프록시 캐시가 있다고 말합니다.

프록시가 URL의 두 인코딩을 캐시 한 경우 어떤 서비스를 제공할지 어떻게 결정합니까?

비 GZIP 인스턴스 (원래는 제공되지 않습니다 Vary) 모든 클라이언트에게 제공 될 수 있지만 인코딩 된 인스턴스 ( Vary: Accept-Encoding) 동일한 고객에게만 보낼 수 있습니다. Accept-Encoding 원래 요청에 사용 된 헤더 값.

EG Opera는 보냅니다 "deflate, gzip, x-gzip, identity, *;q=0" 그러나 IE8은 보냅니다 "gzip, deflate". 사양에 따르면 캐시는 두 브라우저 사이에 컨텐츠 인코딩 된 캐시를 공유해서는 안됩니다. 이것이 사실입니까?

도움이 되었습니까?

해결책

우선, 엔티티가 실제로 해당 헤더 (또는 부재)에 따라 엔티티가 실제로 변할 때 "vary : accept-encoding"을 보내지 않는 것이 잘못되었습니다.

즉, SPEC는 현재 오페라에 대한 캐시 된 응답을 제공하는 실제로 불일치합니다. httpbis, 6 부, 섹션 2.6. 어쩌면 이것은 캐시 요구 사항을 완화 해야하는 영역 일 것입니다 (후속 조치를 취할 수 있습니다. IETF HTTP 메일 링리스트...

업데이트 : 이것은 이미 공개 질문으로 표시되어 있음이 밝혀졌습니다. 방금 문제 추적기에 문제를 추가했습니다. 발행 147.

다른 팁

물론 줄리안은 옳습니다. 수업: 항상 보내십시오 Vary: Accept-Encoding 스니핑 할 때 Accept-Encoding, 응답 인코딩이 무엇이든 상관 없습니다.

내 질문에 대답하기 위해, 당신이 실수로 떠나면 Vary 프록시가 인코딩되지 않은 응답을받는 경우 Vary), 단순히 후속 요청에 대해 간단히 캐시하고 반환 할 수 있습니다 (무시 Accept-Encoding). 오징어는 이것을합니다.

Vary를 떠나는 데있어 가장 큰 문제는 캐시가 Vary없이 인코딩 된 변형을 수신하는 경우 수락 인코딩이 클라이언트가 내용을 이해할 수 없음을 나타내는 경우에도 다른 요청에 응답하여이를 보낼 수 있다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top