我试图弄清楚如何使Google App Engine(标准版)将压缩应用于Next.js / Node.js / Express应用程序的输出。
据我所知,问题是
1)Google的负载均衡器从请求中删除了所有表明客户端支持压缩的元标记,因此app.use(compression())
中的server.js
不会做任何事情。我尝试使用{filter: shouldCompress}
函数强制进行压缩,但是似乎无关紧要,因为Google的前端 still 返回未压缩的结果。 (本地压缩效果很好。)
2)Google的负载均衡器如何以及何时选择应用压缩对我来说是一个谜。 (特别是为什么不对我愚蠢但庞大的application/javascsript
内容:))
这是他们在文档中所说的:
如果客户端发送的HTTP标头带有原始请求,则表明 客户端可以接受压缩(压缩)内容,App Engine 自动压缩处理程序响应数据并附加 适当的响应头。它同时使用了Accept-Encoding和 用户代理请求标头,以确定客户端是否可以可靠地 接收压缩的响应。 How Requests are Handled: Response Compression
就是这样。我很想在该项目中使用App Engine,但是当index.js为700KB而不是200KB压缩时,这简直是一派颠覆之作。
答案 0 :(得分:0)
根据Node.js的Request Headers and Responses documentation,出于安全目的,从请求中删除了Accept-Encoding标头。
注意:实体标头(与请求正文相关的标头)未清理或检查,因此应用程序不应依赖它们。特别是,Content-MD5请求标头未经修改地发送到应用程序,因此可能与内容的MD5哈希不匹配。另外,服务器不会检查Content-Encoding请求标头,因此,如果客户端发送压缩的请求正文,它将以压缩形式发送到应用程序。
还要注意Google Group上的响应,内容为:
今天,我们没有通过
Accept-Encoding
标头,因此您的中间件无法决定应压缩它。我们将在新的几周内为此解决问题。