2009-10-19 70 views
4

我有一個Google Appengine應用程序使用urllib2 POSTs從另一個服務器請求頁面。我最近在運行Apache2的其他服務器上啓用了gzip壓縮,並且Appengine頁面請求在關鍵錯誤上開始失敗,表明「content-length」不在標頭中。appengine,urlfetch和內容長度標題

我沒有明確地聲明gzip是Appengine的請求中的一個可接受的編碼,但Appengine可能會添加該標頭。谷歌搜索沒有明確指出Appengine的urlfetch隱式添加頭來接受gzip編碼。

如果我沒有記錯,Apache2在響應被壓縮時省略了內容長度標題,但不應該影響來自同一服務器的非壓縮響應。

有沒有人知道發生了什麼,爲什麼內容長度標題被省略?

回答

2

根據這個線索: http://groups.google.com/group/google-appengine-java/browse_thread/thread/5c5f2a7e2d2beadc?pli=1) 上AppEngine上的Java新聞組,谷歌並一般設置「接受編碼:gzip」的網址抓取請求頭,然後解壓縮(ungzips)輸入的數據悉數交給前腳本。顯然,Appengine在請求出口到互聯網時隱式地添加了一個accept-encoding:gzip標頭,並對響應進行了解壓縮,但不會將內容長度插入解壓縮數據大小的標頭中。因此,如果外部服務器將提供gzip響應,Appengine腳本的最終結果(經過上述Appengine的所有預處理和後處理行爲後)是丟失了內容長度標頭。