【发布时间】:2016-09-08 12:17:36
【问题描述】:
我通过关注those instructions 为我的网络服务 (Play 2.4) 中的所有响应启用了 gzip 压缩。易于设置,我可以看到它就像一个魅力,用 curl 和 wireshark 检查发送的响应是压缩的。
现在我想成为一名优秀的开发人员并添加一个集成测试以确保下周没有人破坏 HTTP 压缩。乐趣从这里开始!我的测试如下所示:
"use HTTP compression" in {
forAll(endPoints) { endPoint =>
val response = await(
WS.url(Localhost + port + "/api" + endPoint).withHeaders("Accept-Encoding" -> "gzip").get()
)
response.header("Content-Encoding") mustBe Some("gzip")
}
}
但是,测试失败,因为 WS 的响应标头不包含内容编码信息,并且正文以纯文本形式返回,未压缩。
[info] - should use HTTP compression *** FAILED ***
[info] forAll failed, because:
[info] at index 0, None was not equal to Some("gzip") (ApplicationSpec.scala:566)
在运行此测试时检查wireshark 中的流量我可以清楚地看到服务器正在返回一个gzip 编码的响应,所以看起来WS 以某种方式透明地解压响应并剥离内容编码标头?有没有办法获得带有完整标头的纯压缩响应,以便检查响应是否被压缩?
【问题讨论】:
-
您找到解决方案了吗?
-
查看我的答案below(它最终有点太大,无法回复评论)。我最终使用普通的旧 Java 类并完全绕过 Play-WS 进行这个单一测试,因为我需要更底层的东西。
标签: scala playframework playframework-2.4