繁体   English   中英

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM