1

我无法通过 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
4

1 回答 1

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

于 2012-10-18T19:49:15.763 回答