考虑服务器B向服务器A(加密服务器)发出http请求并获取输出流(加密)的情况。这样服务器B就可以在这个加密流的帮助下编写。
现在,此加密输出流将在服务器A中打开,在服务器B处关闭。
是否可以在http响应中发送输出流?
- 醇>
发送输出流是否正确?或者是否有任何约定,例如输出流必须在它所源自的同一服务器(或同一应用程序)中关闭?
答案 0 :(得分:0)
是的,这是可能的。这就是文件下载的工作原理。
首先,您必须设置您要提供的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
<强> #Edit 强>
Streams是数据通道的端点。就像HTTP地址一样,它是服务器资源的端点。
如果是流,我们的程序不需要知道实际资源所在的位置。我只需要知道如何与流进行交互。
因此,在HttpServletResponse
流的情况下,数据位于您的服务器中。客户端的浏览器(或任何其他客户端)与您的服务器建立连接。当我们在流上调用方法(如读/写)时,会发送或接收此连接上的数据。在HttpServletResponse
的情况下,这些调用会导致通过TCP连接传输HTTP数据包。
有关Java Stream(或具有类似概念的任何其他语言)的更多信息,请查看此处。
https://docs.oracle.com/javase/tutorial/essential/io/streams.html