我正在使用Play 2.2 Scala
似乎在使用chunked响应时,Global.scala上的过滤器声明被忽略(因此我的响应不是GZip编码的)
我目前正在这样做,它似乎最初起作用
import scala.concurrent.ExecutionContext.Implicits.global
val enumerator = Enumerator.outputStream { outputStream =>
val finalOutputStream = {
if ( canGzip ) new GZIPOutputStream(outputStream)
else outputStream
}
CustomSerializer.serialize(call,finalOutputStream)
}
val headers = List(
Some("Content-Type","application/json"),
if (canGzip) Some(("Content-Encoding","gzip")) else None
).flatten
Ok.chunked(enumerator).withHeaders(headers: _*)
我不是http专家,所以我想知道它对所有客户都没问题。
根据source code doc,我还可以申请Gzip Enumeratee
val finalEnumerator = if ( canGzip ) {
jsonEnumerator through Gzip.gzip(bufferSize = 8192)
} else jsonEnumerator
在Play框架中是否有更多惯用的GZip响应方式(即使是最新版本?)。
我觉得我在这里有点玩火,我会错过一些实现细节/标题。如果有一种行之有效的方法来实现我想要的东西,我会感兴趣。
还问了另一个相关问题:Can Apache/nginx gzip server response if it's already chunked?