2010-03-07 4 views
4

브라우저에서 gzip으로 압축 된 페이지를 서버에서 수신하는 방법을 들어 보았습니다. 또한 서버에 보내는 양식 데이터를 gzip으로 처리 할 수 ​​있습니까? 가능하다면이 데이터를 서버에서 어떻게 압축합니까?gzipped 양식 데이터 보내기

저는 AppEngine의 webapp 모듈을 사용하고 있습니다 만, 일반적인 설명이나 튜토리얼에 대한 포인터로도 충분합니다. 나는 쓸데없는 검색을 해왔다.

답변

4

브라우저가 gzip으로 된 양식 데이터를 서버에 보낼 수 있다고 생각합니다. 그렇게하는 것이 일반적인 것인지 아닌지는 잘 모릅니다.

송신자는 Content-Encoding: 헤더에 gzip이 포함 된 값이 있어야합니다. 메시지 본문은 gzip 인코딩으로 인코딩해야하며, 파이썬에서 gzip으로 압축 된 데이터를 gzip.GzipFile 클래스로 압축/압축 해제 할 수 있습니다. gzip 모듈이 appengine에서 사용 가능한지 여부는 알 수 없습니다. C 모듈 구현이 필요한 경우 아마도 그렇지 않을 것입니다.

디코딩이 진행되는 한, 앱 엔진 프로그램이 실행되기 전에 실행되는 웹 기계가 gzipped 콘텐츠를 디코딩 할 가능성이 있습니다. appengine에 대한 작업을 거의하지 않았으므로 그 종류의 세부 사항에 익숙하지 않습니다. 서버 측에서 걱정할 필요가 없다고해도 ... 자동으로 처리됩니다. 확인해 봐야 겠어.

RFC2616, 특히 Accept-EncodingContent-Encoding의 섹션을 보는 것이 유용 할 수 있습니다.

+0

AIUI, RFC2616은 클라이언트와 서버 간 통신에 관한 것입니다. 나는이 질문에 스스로 답하려고 노력했다. (나는 클라이언트가 서버에 압축률이 높은 많은 데이터를 보내는 앱을 가지고있다.) 만족할만한 답을 얻지 못했다. JS에는 LZW 구현이 있지만 꽤 느리다.나는 이것을 처리 할 수있는 JS 밖에서의 방법을 전혀 모른다. AFAICT 브라우저는 gzip * 디코딩 * 만 구현합니다. – Sai

+3

HTTP RFC는 두 방향 모두를 다룹니다. Content-Encoding은 클라이언트가 제공 할 수있는 허용 헤더이지만 실제로 포스트 데이터를 gzip하려고 시도하는 클라이언트는 알지 못합니다. App Engine이이를 지원하는지 확인할 수 있습니다 - RFC는 다음과 같이 말합니다 : "요청 메시지에서 엔티티의 콘텐츠 코딩이 원 서버에 적합하지 않으면 서버는 상태 코드 415로 응답해야합니다 (지원되지 않는 미디어 유형). " –

4

짧은 답변 :

아니, 대부분의 브라우저는 클라이언트 요청에 대한 양식 데이터를 압축하지 않습니다.

긴 대답 :

예, 모든 브라우저 클라이언트가 압축 된 형태로 데이터를 전송 할 수 있습니다. 그러나 브라우저가 우리를 위해 데이터를 압축하지 않기 때문에 우리는 스스로 압축해야합니다.

Gzip은 publicly available 인 DEFLATE 알고리즘을 사용하며 자유롭게 사용할 수 있습니다. 수행 할 수있는 일은 JavaScript를 사용하여 클라이언트 측에서 양식 데이터를 압축 한 다음 (직접 작성하지 않으려면 JS Gzip library을 다운로드 한 후) GET, POST 또는 PUT을 통해 서버에 압축 된 데이터를 전송하는 것입니다. XMLHttpRequest.

웹 서버를 제어하는 ​​경우 데이터를 가져 와서 압축을 풀면됩니다. 당신이 통제 할 수 없다면, 설정된 모든 정책을 따라야 할 것입니다. 예를 들어, 일부 웹 서버는 특정 Content-Type을 설정하도록 요구할 수 있지만 다른 웹 서버에서는 특정 Content-Type을 전혀 지원하지 않을 수도 있습니다.

마지막으로 리소스가 이미 압축 된 파일 인 경우 gzipping 할 때 이점이 없을 수 있습니다. 그러나 리소스가 압축되지 않은 데이터 (예 : 80000 자의 포럼 게시물)가 큰 경우 이점은 엄청납니다.