Play中有没有一种方法可以通过WebSocket通道传递用Gzip压缩的数据?我在读https://www.playframework.com/documentation/2.3.1/GzipEncoding关于GzipFilter。有没有一种方法可以将它与WebSocket一起使用?此外,我的服务器也接受HTTP请求,但我不想将GZIP应用于它们。有没有一种方法可以将Gzip仅与WebSocket一起使用,不包括HTTP?
AFAIK有一些针对websocket连接的压缩扩展。(https://datatracker.ietf.org/doc/html/draft-tyoshino-hybi-permessage-compression-00)。
在某些浏览器中,这一问题现在应该已经修复,并在默认情况下启用(Chrome)。在其他浏览器(Firefox、WebKit)中,它还没有:https://bugzilla.mozilla.org/show_bug.cgi?id=792831和https://bugs.webkit.org/show_bug.cgi?id=98840
只要客户端和服务器支持这一点,那么仅仅启用Gzip就不会有任何问题。
您可以配置何时使用Gzip(至少在某种程度上)。例如,如果你有一个JSON API,并且你也提供普通的HTML,你可以决定只Gzip JSON数据:
new GzipFilter(shouldGzip = (request, response) =>
response.headers.get("Content-Type").exists(_.startsWith("application/json")))