我尝试使用EncodingResourceWrappper和GzipEncoderFactory来gzip我扭曲的Web服务器响应。
这似乎适用于大多数文件。但我无法提供稍后通过requirejs加载的JavaScript文件。 (浏览器(Chrome或Firefox)只是一直在旋转。
当我输入JavaScript源路径作为URL时,文件很好。 [更新:不,因为它们来自浏览器缓存]
AppEngine(也可以对它们进行gzip压缩)可以很好地处理这些文件。
class SharedRoot(resource.Resource):
"""Root resource that combines the two sites/entry points"""
WSGI = None
def getChild(self, child, request):
request.prepath.pop()
request.postpath.insert(0, child)
return self.WSGI
def render(self, request):
return self.WSGI.render(request)
def render_POST(self, request):
logger.debug(pformat(request.__dict__))
newdata = request.content.getvalue()
logger.debug(newdata)
return ''
class WildcardResource(resource.Resource):
def __init__(self, childResource):
resource.Resource.__init__(self)
self.childResource=childResource
def getChild(self,child, request):
return self.childResource
class GzipFileResource(static.File):
def getChild(self, path, request):
child = super(GzipFileResource, self).getChild(path, request)
return EncodingResourceWrapper(child, [GzipEncoderFactory()])
class DynamicFile(GzipFileResource):
def render_GET(self, request):
request.setHeader("Cache-Control", ["no-cache"])
request.setHeader("Pragma", ["no-cache"])
request.setHeader("Expires", ["Sat, 26 Jul 1997 05:00:00 GMT"])
return super(DynamicFile, self).render_GET(request)
shared=SharedRoot()
shared.WSGI=EncodingResourceWrapper(wsgiResource,[GzipEncoderFactory()])
shared.putChild("static",GzipFileResource("static"))
shared.putChild("css", GzipFileResource("static/css"))
shared.putChild("js",WildcardResource(GzipFileResource("source")))
有什么想法吗?
更新:
跟踪和调试显示,脚本文件出现问题> 64 KB,第一次调用gzip压缩对象只返回gzip头(我可以在网络跟踪中看到),第二次调用没有返回任何内容(因为其余的压缩输出会在flush调用时发生(我无法在网络中看到跟踪))。
使用增加的缓冲区大小(abstract.FileDescriptor)进行测试无法解决问题