是否可以发送输出流作为对 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 流的情况下,数据位于您的服务器中。客户端的浏览器(或任何其他客户端)与您的服务器建立连接。当我们调用 read/write 等流上的方法时,将通过此连接发送或接收数据。 HttpServletResponse 情况下的这些调用会导致通过 TCP 连接传输 HTTP 数据包。

有关 Java Stream(或具有类似概念的任何其他语言)的更多信息,请查看此处。

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