播放框架:分块响应+应用gzip过滤器

时间:2016-11-30 13:13:30

标签: scala http playframework gzip playframework-2.2

我正在使用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?

0 个答案:

没有答案