【问题标题】:Chunked HTTP Responses in a Spring based web application基于 Spring 的 Web 应用程序中的分块 HTTP 响应
【发布时间】:2011-11-15 07:29:21
【问题描述】:

我们正在 Java 中的 Spring 框架之上构建一个框架。我们希望能够添加对 HTTP 块响应的支持。 spring 有这个 API 吗?

我们试图实现的基本上是在准备好其余响应之前发送 HTML <head> 部分。这样客户端就可以开始下载样式表/js等了。

如果有办法查看客户端是否支持 HTTP 分块响应会更好。

【问题讨论】:

  • 你的 servlet 容器是什么,你的视图技术是什么? (jsp、速度等)
  • 它使用 JSP 作为视图组件,并在 Geronimo 中作为应用服务器运行。

标签: java performance spring http http-streaming


【解决方案1】:

RFC2616 指定了一个 TE: trailers 标头,它是客户端接受分块传输的明确声明,但我从未见过浏览器或设备实际发送此消息。任何发送 HTTP/1.1 请求的设备都应该接受分块传输。

根据我的经验,只要您不指定内容长度,Spring 就会自动执行分块传输。我的经验主要是 Spring 控制器,所以 YMMV 和 JSP。

【讨论】:

  • 不,TE: trailers 不表示接受分块编码。它表示接受分块数据的“预告片”中的附加标头。 RFC 规定'所有 HTTP/1.1 应用程序必须能够接收和解码“分块”传输编码'
【解决方案2】:

HTTP 是第 7 层(/OSI 模型)/5 层(TCP/IP 模型)协议。一个给定的应用程序框架运行在它之上或之上。

因此,给定的 HTTP (get/POST) / 流水线请求本质上是使用客户端框架打开的 TCP 管道。

在服务器端,通常您可以处理流水线请求(一个 TCP 管道中的多个 get/post 请求)。

根据您的要求,您可能希望通过建立一个新的 TCP 管道来承载请求的前半部分和后半部分,将给定的请求拆分为 2 个子请求。

现在这里的挑战是,即使您的客户端实现了这一点,服务器端也应该接受这样的拆分请求。通常,服务器端会丢弃格式错误的 HTTP 请求。

【讨论】:

    【解决方案3】:

    尝试使用 Apache Tiles 作为布局管理器。您可以在页面的不同磁贴上设置刷新属性,据我所知,刷新磁贴会刷新响应。

    顺便说一句,您不使用压缩机制,例如容器前面的 Apache httpd 甚至 gzip servlet 过滤器吗?如果是这种情况,Apache Tiles 将无法帮助您,您最好忘记您的需求。

    【讨论】:

    • 使用Apache Tiles是不可能的,因为这个Application已经开发好了,JSP代码有几千行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2013-04-07
    • 2017-01-12
    • 2015-03-07
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多