Java Jersey 2.4.1:使用固定长度流时的内容长度标头要求

时间:2013-12-18 23:23:46

标签: java jersey-2.0

Jersey 2.4.1使我们能够启用固定长度的流媒体。这在上传大文件时非常有用。用于启用此功能的新客户端属性是:HTTP_URL_CONNECTOR_FIX_LENGTH_STREAMING。

默认情况下,在执行上载时,在将字节发送到目标之前,连接器会缓冲整个实体内容。这意味着上载大文件时客户端可能会耗尽内存。启用固定长度流可以解决这个问题。

不幸的是,当请求中未指定(或设置为0)内容长度标头时,不会遵循此属性。我的问题是为什么?泽西岛运营时试图通过这种限制来阻止什么问题?流式传输数据所需的内容长度信息是什么?

谢谢,

的Habib

2 个答案:

答案 0 :(得分:0)

无论是否激活固定长度流,客户端都应该设置标头。使用固定长度,您可以知道大小而无需缓冲内容,但只有在实际设置标头时才有意义。服务器不关心客户端是否缓冲内容以确定长度。

  

在HTTP中,只要在传输之前确定消息的长度,就应该发送[Content-Length字段],除非4.4节中的规则禁止这样做。

RFC 2616, section 14.13 Content-Length

如果不设置长度标头,客户端可以无限期地开始流式传输,而无需缓冲区。我想这是泽西岛试图阻止的,因为那时服务器不会知道内容何时结束(在某些情况下列出了 RFC 2616, section 4.4 Message Length)。

答案 1 :(得分:0)

我将从客户端收到的上传请求转发到另一个端点。我不控制我收到的请求中是否存在内容长度标头,因此可能并不总是有内容长度标头要发送到终点。

尽管如此,我可以看到我们需要防范您上面提到的恶意案件,尽管我最初认为这将是后端的责任。

感谢您的澄清。