webapp2如何从响应头中删除Cache-Control:no-cache?

时间:2012-10-18 18:04:42

标签: python google-app-engine internet-explorer-8 blobstore webapp2

我无法通过HTTPS服务appengine blobstore,特别是IE 8& IE 7浏览器,因为浏览器不喜欢通过https提供可下载的内容。 根据一篇微软文章,这是因为 Cache-Control:no-cache 标题。

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

本文中提出的解决方案是从响应中删除Cache-Control: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

1 个答案:

答案 0 :(得分: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-key}}。pdf