gpt4 book ai didi

scala - Play 何时何地设置 Content-Length header ?

转载 作者:可可西里 更新时间:2023-11-01 16:33:34 26 4
gpt4 key购买 nike

我正在尝试使用 Common Log Format 记录我的 Play 应用程序收到的每个请求.

我可以在 Filter 中获取所有这些字段除了体长,都还好。

我注意到调用 Play 会返回 Content-Length,因为 Play 会在您不告诉它的情况下自动计算出来(除非您正在使用 Chunked Responses 等做时髦的事情)。

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

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

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

我正在使用 Play 2.2.3

最佳答案

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

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

关于scala - Play 何时何地设置 Content-Length header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25651354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com