簡體   English   中英

是否可以發送輸出流作為對 HTTP 請求的響應?

[英]Is it possible to send an ouput stream as response to a HTTP request?

考慮服務器 B 向服務器 A(這是加密服務器)發出 HTTP 請求並獲得輸出流(已加密)的情況。 這樣服務器 B 就可以在這個加密流的幫助下進行寫入。

現在這個加密的輸出流將在服務器 A 中打開並在服務器 B 中關閉。

  1. 是否可以在 HTTP 響應中發送輸出流?

  2. 發送輸出流作為響應是正確的方法嗎? 或者是否有任何約定,例如輸出流必須在其起源的同一服務器(或同一應用程序)中關閉?

是的,這是可能的。 這就是文件下載的工作原理。

首先,您必須設置要提供的Content-Type 如果它是簡單的二進制文件,則將其設置為application/octet-stream 之后獲取響應的outputStream並將文件內容轉儲到其中。

像下面

response.setContentType("application/octet-stream");
response.setContentLength(fileSizeInBytes);//new File('myfile').length(), optional step
response.getOutputStream().write(fileBytes);//do it in chunks

#編輯

流是數據通道的端點。 就像 HTTP 地址是服務器資源的端點一樣。

在流的情況下,我們的程序不需要知道實際資源所在的位置。 我只需要知道如何與流交互。

因此,在HttpServletResponse流的情況下,數據位於您的服務器中。 客戶端的瀏覽器(或任何其他客戶端)與您的服務器建立連接。 當我們調用流上的方法(如讀/寫)時,會通過此連接發送或接收數據。 HttpServletResponse情況下,這些調用會導致通過 TCP 連接傳輸 HTTP 數據包。

有關 Java Stream(或具有類似概念的任何其他語言)的更多信息,請查看此處。

https://docs.oracle.com/javase/tutorial/essential/io/streams.html

暫無
暫無

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

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