요청에 대해 http 압축을 활성화 할 수 있습니까?


35

서버 응답에 http 압축을 사용하도록 설정하는 방법과 들어오는 요청에 대한 정보는 많이 있습니다. 브라우저가 대형 게시물을 서버로 보내기 전에 압축하는 것이 이치에 맞지 않습니까?

또 다른 예는 우리가 사용하는 REST 웹 서비스입니다. 우리는 큰 XML 파일 (10MB 이상)을 가진 빈번한 PUT 요청을 보내야하며 양쪽에서 약간의 대역폭 / 속도 이점을 확실히 볼 수 있습니다.

서버 측에서 해결 된 문제입니까? 아니면 각 웹 응용 프로그램에서 개별적으로 처리해야합니까?

답변:


30

PUT압축 된 서버로 데이터를 보내 려면 요청 본문을 압축하고 Content-Encoding: gzip헤더를 설정해야합니다 . 헤더 자체는 압축 해제되어야합니다. mod_deflate에 설명되어 있습니다 .

mod_deflate 모듈은 gzip 압축 요청 본문을 압축 해제하기위한 필터도 제공합니다. 이 기능을 활성화하려면 SetInputFilter 또는 AddInputFilter를 사용하여 DEFLATE 필터를 입력 필터 체인에 삽입해야합니다.

...

요청에 Content-Encoding : gzip 헤더가 포함 된 경우 본문이 자동으로 압축 해제됩니다. 요청 본문을 압축 할 수있는 브라우저는 거의 없습니다. 그러나 일부 특수 응용 프로그램은 실제로 일부 WebDAV 클라이언트와 같은 요청 압축을 지원합니다.

그리고 그것을 설명하는 기사는 다음과 같습니다.

어떻게합니까? 다음은 다시 mod_deflate 소스 코드의 간략한 설명입니다. 기본 요청에서만 작동하고 하위 요청은 없습니다. 즉, 요청을 사용하기로 선택한 경우 요청의 전체 본문을 gzip으로 압축해야합니다. 예를 들어 멀티 파트 요청에서 파일이 포함 된 부분 만 압축 할 수는 없습니다.

별도로, 브라우저는 다음 Accept-Encoding과 같이 헤더를 설정하여 서버 응답 내용의 압축을 요청할 수 있습니다 .

GET /index.html HTTP/1.1
Host: www.http-compression.com
Accept-Encoding: gzip
User-Agent: Firefox/1.0

압축 된 데이터를 브라우저로 반환합니다.


5
+1 NB 당신은 씁니다 you must compress the whole request, inclusive of header. 그러나 http 헤더를 압축해서는 안됩니다 . 압축 해야하는 유일한 것은 (완전히 인용 한 기사에 따라 전체) http 본문입니다.
Eugene Beresovsky

1
이것은 잘못된 것입니다 : Accept-Encoding서버에게 클라이언트가 지원하는 압축을 알려줍니다. 헤더 Content-Encoding는 본문의 압축을 설명합니다.
maaartinus

@maaartinus는 첫 번째 인용 두 번째 단락을 참조하십시오. 명확성을 위해 답변을 재구성했습니다.
Andy

4

응답이 아닌 압축 요청에 대한 부분에 응답 : 예, 널리 사용되지 않는 경우에도 가능합니다. 클라이언트 측 앱은 적절한 콘텐츠 인코딩 헤더를 설정해야합니다. 서버 측 앱은 두 가지 선택이 있습니다.

  1. 앱은 요청 본문 자체를 다시 확장하는 것을 지원합니다. 이를 수행 할 수있는 예제 라이브러리는 phpxmlrpc 라이브러리입니다.

  2. 웹 서버는 응답 본문을 앱으로 전달하기 전에 팽창시킵니다. 이것은 아파치의 mod_deflate 필터를 사용하고 inputFilter를 설정하는 것이 가능합니다


2

내가 아는 브라우저가 아니라면 플러그인을 찾아야합니다. 서버는 요청이 어떻게 들어오는 지 알리기 위해 기본적으로 컨텐츠 인코딩 HTTP 헤더를 설정해야합니다. 서버는 물론 해당 인코딩을 처리 할 수 ​​있어야합니다.


0

이것은 허용되지 않습니다. HTTP 스펙 ( RFC 2616 ) 에 따르면 Content-Encoding가능한 요청 헤더 필드 중 하나가 아니므로 서버에이를 알리는 합법적 인 방법이 없으므로 요청 엔티티 본문을 압축 할 수 없습니다. 요청 본문의 모든 압축은 비표준 확장으로 만 수행됩니다.


12
이 답변은 잘못된 RFC 2616 구체적으로 그 언급 If the content-coding of an entity in a request message is not acceptable to the origin server, the server SHOULD respond with a status code of 415 (Unsupported Media Type).또한로 표시 Request and Response messages MAY transfer an entity if not otherwise restricted by the request method하고 Content-Encoding있는 옵션으로 나열되고entity-header
PeterT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.