Program Tip

브라우저가 gzip 요청을 보낼 수없는 이유는 무엇입니까?

programtip 2020. 11. 8. 10:55
반응형

브라우저가 gzip 요청을 보낼 수없는 이유는 무엇입니까?


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


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

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

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


클라이언트는 서버가 gzip으로 압축 된 요청을 이해할 수 있다는 것을 미리 알 수 없지만 서버는 클라이언트가이를 수락 할 것임을 알 수 있습니다.


그것은 서버가 그것을 받아 들일 것이라는 것을 보장 할 수 있다면 가능합니다. 이것은 OPTIONS 요청 사용을 의미 할 수 있습니다.

웹 브라우저가 할 수있는 일 (예 : 파이프 라이닝)은 할 수 없지만 할 수있는 일은 많습니다. 웹 브라우저 개발자는 변경의 호환성 의미를 고려합니다.

이기종 환경에는 다양한 웹 서버와 구성이 있습니다. 클라이언트의 작업 방식을 변경하면 일부가 손상 될 수 있습니다.

아마도 서버의 1 %만이 gzip으로 압축 된 요청을 수락 할 수 있지만 일부는 그렇게한다고 광고하지만 올바르게 수락 할 수 없으므로 사용자는 해당 사이트에 파일을 업로드하는 것이 거부됩니다.

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

따라서 이러한 옵션이 자동으로 꺼진 사용자 에이전트 또는 서버 (또는 도메인 이름)의 블랙리스트가 생기는 것은 끔찍합니다.


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


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

서버로 전송되는 포스트 데이터를 압축하는 javascript로 gzip 구현을 작성하는 것은 쉽습니다. 서버는 클라이언트 데이터가 압축되어 전송된다는 것을 알고있는 필터 (j2ee 용어)를 가질 수 있습니다.이 필터는 데이터를 압축 해제 한 다음 데이터를 정상적으로 읽는 서블릿 (또는 Struts의 작업 클래스)에 전달합니다 (예 : request.getParameter (). ...).

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

앤디.


HTTP는 다음과 같이 설계되었습니다.

  • 클라이언트는 요청을 일반 텍스트로 말합니다 (압축 된 답변을 이해할 수있는 경우 포함).
  • 적절한 인코딩 (압축 여부)으로 서버 응답

그러나이 디자인에서 클라이언트는 서버가 미리 이해하는지 알지 못하기 때문에 압축 된 요청을 보낼 수 없습니다.

참고 URL : https://stackoverflow.com/questions/424917/why-cant-browser-send-gzip-request

반응형