簡體   English   中英

Java Jersey 2.4.1:使用固定長度擴展時的內容長度標頭要求

[英]Java Jersey 2.4.1: content-length header requirement when using fixed length sreaming

Jersey 2.4.1使我們能夠啟用固定長度的流。 上傳大文件時,這非常有用。 用於啟用此功能的新客戶端屬性為:HTTP_URL_CONNECTOR_FIX_LENGTH_STREAMING。

默認情況下,在進行上傳時,整個實體內容將由連接器緩沖,然后再將字節發送到目的地。 這意味着,在上傳大文件時,客戶端可能會耗盡內存。 啟用固定長度的流可以解決此問題。

不幸的是,如果在請求中未指定content-length標頭(或將其設置為0),則不會使用此屬性。 我的問題是為什么? 通過設置此限制,Jersey運行時試圖解決什么問題? 內容長度信息是流數據所必需的嗎?

謝謝,

哈比卜

不管固定長度的流是否處於活動狀態,客戶端都應設置頭。 使用固定長度,您無需緩沖內容就知道大小,但這只有在您實際設置標頭時才有意義。 服務器不在乎客戶端是否緩沖內容以確定長度。

在HTTP中,只要在傳輸之前可以確定消息的長度,就應該發送[Content-Length字段],除非第4.4節中的規則禁止這樣做。

RFC 2616,第14.13節內容長度

如果不設置長度標題,則客戶端可以無限期地開始流傳輸,而無需緩沖區。 我猜這是Jersey試圖阻止的事情,因為服務器不知道內容何時結束(例如RFC 2616第4.4節“消息長度”中列出的某些情況)。

我將從客戶端收到的上載請求轉發到另一個端點。 我無法控制接收到的請求中內容長度標頭的存在,因此可能並不總是具有要發送到終點的內容長度標頭。

也就是說,盡管我最初認為這是后端的責任,但我可以看到我們需要保護您免受上面提到的惡意攻擊。

感謝您的澄清。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM