문제

웹서버가 gzip 응답을 보낼 수 있는데 브라우저가 gzip 요청을 보낼 수 없는 이유는 무엇입니까?

도움이 되었습니까?

해결책

클라이언트와 서버는 통신 방법에 동의해야 합니다.그 중 일부는 통신을 압축할 수 있는지 여부입니다.HTTP는 요청/응답 모델로 설계되었으며 원래 생성은 항상 작은 요청과 잠재적으로 큰 응답을 갖도록 구상되었습니다.압축은 안됨 필수의 HTTP를 구현하려면 이를 지원하지 않는 서버와 클라이언트가 모두 있습니다.

HTTP 압축은 압축을 지원할 수 있다고 클라이언트에 의해 구현되며, 서버가 요청에서 이를 확인하고 압축을 지원하면 응답을 압축할 수 있습니다.요청을 압축하려면 클라이언트에 요청이 압축되도록 실제로 협상하는 "사전 요청"이 있어야 합니다. 또는 모든 요청에 ​​대해 지원되는 인코딩으로 압축이 필요합니다.

* 2017년 2월 업데이트 *8년이 지났지만 @Phil_1984_가 지적했듯이 세 번째 가능한 솔루션은 클라이언트와 서버가 압축 지원을 협상한 다음 이를 후속 요청에 사용하는 것입니다.실제로 HSTS와 같은 기능은 서버가 TLS만 말하고 암호화되지 않은 링크는 무시할 것으로 예상하는 클라이언트 캐싱과 함께 이러한 방식으로 작동합니다.HTTP는 명시적으로 상태 비저장으로 설계되었지만 이 시점에서는 그 이상으로 발전했습니다.

다른 팁

클라이언트는 서버가 GZIPPED 요청을 이해할 것이라는 것을 미리 알 수 없지만 서버는 클라이언트가 수락 할 것임을 알 수 있습니다.

서버가이를 수락 할 수 있도록 보장 할 수 있습니다. 이것은 옵션 요청을 사용하는 것을 의미 할 수 있습니다.

웹 브라우저가 할 수있는 일이 많이 있습니다 (예 : 파이프 라인)는하지 않습니다. 웹 브라우저 개발자는 변경의 호환성 영향을 고려합니다.

이기종 환경에는 많은 웹 서버와 구성이 있습니다. 고객이 일하는 방식을 바꾸면 일부를 깨뜨릴 수 있습니다.

아마도 서버의 1%만이 GZIPPED 요청을 수락 할 수 있지만 일부는 자신이하는 것을 광고하지만 올바르게 수락 할 수는 없을 것입니다. 따라서 사용자는 해당 사이트에 파일을 업로드하는 것이 거부됩니다.

역사적으로 많은 클라이언트 / 서버 구현이 많이있었습니다. 오랫동안 주요 웹 브라우저에서 GZIPPER 응답이 깨졌습니다 (고맙게도 대부분은 사라졌습니다).

따라서 해당 옵션이 자동으로 꺼진 사용자 에이전트 또는 서버 (또는 도메인 이름)의 블랙리스트로 끝납니다.

서버가 그것을 수락 할 수 있다는 것을 모르기 때문입니다. HTTP 트랜잭션에는 클라이언트가 보낸 단일 요청에 이어 응답이 있습니다. 클라이언트가 보내는 것 중 하나는 인코딩/압축이 지원할 수있는 것입니다. 그런 다음 서버는 응답을 압축하는 방법을 결정할 수 있습니다. 고객은이 사치가 없습니다.

웹 애플리케이션을 작성하는 경우 클라이언트에게 전송되는 내용과 클라이언트로부터 다시 전송되는 내용을 제어하고 있다고 가정합니다.

JavaScript로 GZIP 구현을 작성하는 것은 쉽습니다. 이는 서버로 전송되는 게시물 데이터를 압축합니다. 서버에는 클라이언트 데이터가 압축되면 필터 (J2EE 용어)를 가질 수 있으며,이 필터는 데이터를 압축 해제 한 다음 데이터를 정상적인 예를 들어 데이터를 정상적인 예를 들어 요청 .getParameter (getParameter)로 전달합니다. ...).

당신이 통제중인 경우 이것은 완벽하게 논리적이고 할 수있는 것처럼 보입니다. 다른 게시물이 언급했듯이 브라우저에 의존하여 자동으로 수행 할 수는 없지만 웹 페이지를 작성하기 때문에 브라우저가 (약간의 작업으로) 압축을 수행 할 수 있습니다.

앤디.

HTTP는 이러한 방식으로 설계되었습니다.

  • 고객은 일반 텍스트로 요청을 말합니다 (압축 답변을 이해할 수있는 경우)
  • Propper 인코딩으로 서버 응답 (압축 여부)

그러나이 설계에서 클라이언트는 서버가 사전에 이해할 것인지 알지 못하기 때문에 압축 요청을 보낼 수 없습니다.

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