考虑服务器 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
关于java - 是否可以发送输出流作为对 HTTP 请求的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749291/