[英]Is it possible to send HTTP request using plain socket connection and receive response without headers?
[英]Is it possible to send an ouput stream as response to a HTTP request?
考慮服務器 B 向服務器 A(這是加密服務器)發出 HTTP 請求並獲得輸出流(已加密)的情況。 這樣服務器 B 就可以在這個加密流的幫助下進行寫入。
現在這個加密的輸出流將在服務器 A 中打開並在服務器 B 中關閉。
是否可以在 HTTP 響應中發送輸出流?
發送輸出流作為響應是正確的方法嗎? 或者是否有任何約定,例如輸出流必須在其起源的同一服務器(或同一應用程序)中關閉?
是的,這是可能的。 這就是文件下載的工作原理。
首先,您必須設置要提供的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.