考虑服务器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流(或任何其他具有类似概念的语言)的更多信息,请查看此处。
https://docs.oracle.com/javase/tutorial/essential/io/streams.html

10-07 12:59