1

我無法通過HTTPS提供appengine blobstore,特別是IE 8 & IE 7瀏覽器,因爲瀏覽器只是不喜歡通過https提供可下載的內容。 根據微軟的文章,這是因爲Cache-Control:no-cache頭。webapp2如何刪除緩存控制:從響應頭無緩存?

http://blogs.msdn.com/b/ieinternals/archive/2009/10/02/internet-explorer-cannot-download-over-https-when-no-cache.aspx

在文章中提出的解決方案是去除緩存控制:從響應no-cache標題。 但是,即使在我嘗試將其設置爲其他內容後,webapp2似乎也會自動添加此標頭。

根據源代碼,它似乎被添加到每個響應 http://code.google.com/p/webapp-improved/source/browse/webapp2.py#362

def __init__(self, *args, **kwargs): 
     """Constructs a response with the default settings.""" 
     super(Response, self).__init__(*args, **kwargs) 
     self.headers['Cache-Control'] = 'no-cache' 

有沒有辦法來覆蓋這個行爲?

這是我在構建響應時試圖做的事情,但是一旦呈現響應,'Cache-Control:no-cache'仍然存在。

self.response.headers['Pragma'] = 'cache-control' 
self.response.headers['Cache-Control'] = 'private' 
self.response.cache_control.no_cache = None 
self.response.cache_control.public = False 
self.response.cache_control.max_age = 1 
+0

我找到了答案:http://stackoverflow.com/questions/7680530/ gae-blobstore-issue-download-failed-in-internet-explorer-8 – voscausa

回答

0

我不在下載處理程序本身中使用webapp2。它看起來像這樣:

class DynServe(blobstore_handlers.BlobstoreDownloadHandler): 

    def get(self, resource):          

     (key, _, _) = resource.rpartition('.') 
     blob_info = blobstore.BlobInfo.get(key)  
     self.send_blob(blob_info, save_as=True)  


app = webapp2.WSGIApplication(
          [ 
          ('/dynserve/([^/]+)?', DynServe), 
          ], debug=True) 
def main(): 
    app.run() 

要服務於PDF,如:/ dynserve/{{BLOB鍵}} PDF

+0

謝謝,我已經試過了,但在IE8/IE7中通過HTTPS提供數據時仍然出現錯誤。它適用於其他瀏覽器(IE9,Chrome,Firefox)。 – Mariatta

+0

奇怪。我在IE7的開發模式中檢查了它,並且工作正常。它接收一個Cache-Control:no-cache。 http://www.energiekantoor.nl/dynserve/AMIfv95UXvxIPFeaZJtivKSpbrY8Xb_HaXQqJ3SHm9_o1MGWmz7alBYqExJ2qNPqSzjb-gKf1gkF2_lh1cC4v2lrMp6-aQq4aErh_UwxnM13V9mtWJuyYOQCzDQtWfFPWowRkzU2S9RxKZgAenoNkIqODdXRsYHttQ.pdf – voscausa

+0

對不起:我這個PDF檢查它。上面的鏈接不使用https。 – voscausa