java - 是否可以发送输出流作为对 HTTP 请求的响应?

标签 java http httprequest outputstream

考虑服务器 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

关于java - 是否可以发送输出流作为对 HTTP 请求的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749291/

相关文章:

java - 如何在没有冲突的情况下使用spring jpa将记录插入数据库

angular - 使用 HttpClient 和 RXJS 将数据发布到 Web API withCredentials : true

python - 在 Django 应用程序中查找主机和端口

crash - 150-180个网址后PhantomJS崩溃

java - 在不同 portlet 应用程序中的主题和 portlet 之间共享 httpssession

java - 程序无法作为Java Applet运行

单例中类字段和方法的Java顺序

java - Chrome 中的文件下载名称

Http.post() 正在将负载从对象更改为函数

javascript - 将数据从 Sails 服务发送到 Controller