Play何时何地设置Content-Length标头?

时间:2014-09-03 18:36:10

标签: scala http playframework content-length

我尝试使用Common Log Format记录我的播放应用正在接收的每个请求。

除了体长,我可以在Filter中获得所有这些字段。

我注意到打电话给Play会返回Content-Length,因为Play会在没有你告诉它的情况下自动计算出来(除非你用Chunked Responses等做一些时髦的事情)。

这会让我相信,在过滤器中,我可以简单地调用

next(rh).map{ response => log(response.header.headers.get("Content-Length")); response }

但这会返回None!然而,当我卷曲任何电话时,我看到了标题。这意味着必须在Content-Length之后设置Filter,但在哪里?我如何/可以从Global.scala访问它?如果没有,那么任何人都知道一种简单的方法获取此信息(以编程方式或其他方式)。

我正在使用Play 2.2.3

1 个答案:

答案 0 :(得分:2)

回复内容长度在iteratee中设置,它将数据写回netty响应,在那里它选择是否应该设置内容长度或根据推送到iteratee的内容开始分组响应,因此实际上不计算您可以在过滤器中访问的任何位置。您可以在此处查看发生这种情况的来源:

https://github.com/playframework/playframework/blob/2.3.x/framework/src/play/src/main/scala/play/core/server/netty/NettyResultStreamer.scala#L119

相关问题