2009-10-19 3 views
4

urllib2 POST를 사용하여 다른 서버의 페이지를 요청하는 Google Appengine 앱이 있습니다. 나는 최근 Apache2를 실행하는 다른 서버에서 gzip 압축을 활성화했으며 Appengine 페이지 요청이 키 오류시 실패하기 시작했습니다. 'content-length'가 헤더에 없음을 나타냅니다.appengine, urlfetch 및 content-length 헤더

Appengine의 요청에 허용 된 인코딩으로 gzip을 명시 적으로 선언하지는 않지만 Appengine이 해당 헤더를 추가 할 수 있습니다. 인터넷 검색은 Appengine의 urlfetch가 암시 적으로 gzip 인코딩을 허용하는 헤더를 추가한다는 명확한 표시를 보여주지 않았습니다.

아파치 2, 올바르게 다시 호출하면 응답이 압축 될 때 콘텐츠 길이 헤더가 생략되지만 동일한 서버의 압축되지 않은 응답에는 영향을 미치지 않습니다.

아무도 무슨 일이 일어나고 있는지, 콘텐츠 길이 헤더가 생략 된 이유에 대해 어떤 통찰력을 가지고 있습니까?

답변

2

이 스레드에있어서, 상기에 데이터를 전달하기 전에) (입력을 ungzips을 URL을 가져올 요청에 헤더 한 다음 압축 해제 : http://groups.google.com/group/google-appengine-java/browse_thread/thread/5c5f2a7e2d2beadc?pli=1) AppEngine에 자바 뉴스 그룹에, 구글은 일반적으로 'gzip을 수락 - 인코딩'을 설정 않습니다 스크립트.

명백하게 Appengine은 인터넷에 요청 방법에 암시 적으로 accept-encoding : gzip 헤더를 추가하고 응답을 압축 해제하지만 압축 해제 된 데이터 크기의 헤더에는 content-length를 삽입하지 않습니다. 따라서 외부 서버가 gzip으로 처리 된 응답을 제공하는 경우 Appengine 스크립트에 대한 최종 결과 (위에서 설명한 Appengine의 모든 사전 및 사후 처리 동작 이후)는 콘텐츠 길이 헤더가 손실됩니다.