如何在gzip标头后正确设置spark java中的content-length

问题描述 投票:2回答:1

我正在使用Spark来提供不同种类的内容。 “ Content-Length”的计算正确,但是使用时我遇到了一个问题:

response.header("Content-Encoding", "gzip")

根据their documentation,当设置了标题时,spark会自动gzip内容...并且可以做到。

但是,我之前计算的“内容长度”不再有效,因此在浏览器中出现“ net :: ERR_CONTENT_LENGTH_MISMATCH”错误。

我自己将其压缩,并无法计算出最终的大小,因为火花将再次压缩输出。

如何知道火花压缩输出后的结果尺寸是什么?

更多详细信息:

我在Spark上创建了一个库,该库会自动设置此类标头,有趣的部分看起来像(简化):

if(request.headers("Accept-Encoding")?.contains("gzip")) {
    response.header("Content-Encoding", "gzip")
    // How to get or calculate the resulting size?
    response.header("Content-Length", ???????)
}

问题是,Spark没有自动设置“ Content-Length”标头,因此我试图添加它。到那时为止,计算是正确的(没有压缩),但是由于Spark将压缩输出(因为它检测到“ gzip”为编码),因此我没有可靠的方法来正确设置它。

我想到的解决此问题的方法是:

  1. 等待直到Spark adds that header automatically(或滚动我自己的分支)。>>
  2. 寻找一种在Spark压缩输出后获得该大小的方法。
  3. 以与Spark相同的方式压缩它,因此我可以计算出大小(但是难看,因为它将压缩输出两次== CPU浪费。]]
  4. 我当前的解决方案是在使用Content-Length标头时不设置gzip标头(但是对于大文件来说,这不是理想的选择,因为浏览器不知道已经下载了哪个百分比)。

    我希望这些细节能使情况更加明朗。

我正在使用Spark投放不同类型的内容。 “ Content-Length”的计算正确,但是在使用时遇到了一个问题:response.header(“ Content-Encoding”,“ gzip”)根据他们的...

java http-headers gzip spark-java
1个回答
0
投票

感谢您的澄清!

  1. 是的,现在您要手动添加它,这就是我要做的,并保持这种方式,除非您的用例确实需要Content-Length。不知道大小有点烦人,但并不罕见。
© www.soinside.com 2019 - 2024. All rights reserved.