Google App Engine标准不压缩我的Next.js / Express应用

时间:2018-10-30 05:46:34

标签: node.js express google-app-engine next.js

我试图弄清楚如何使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压缩时,这简直是一派颠覆之作。

1 个答案:

答案 0 :(得分:0)

根据Node.js的Request Headers and Responses documentation,出于安全目的,从请求中删除了Accept-Encoding标头。

  

注意:实体标头(与请求正文相关的标头)未清理或检查,因此应用程序不应依赖它们。特别是,Content-MD5请求标头未经修改地发送到应用程序,因此可能与内容的MD5哈希不匹配。另外,服务器不会检查Content-Encoding请求标头,因此,如果客户端发送压缩的请求正文,它将以压缩形式发送到应用程序。

还要注意Google Group上的响应,内容为:

  

今天,我们没有通过Accept-Encoding标头,因此您的中间件无法决定应压缩它。

     

我们将在新的几周内为此解决问题。