我应该如何为动态生成的资源实现HEAD响应?

时间:2016-06-25 14:31:48

标签: http spring-mvc

下面的代码是用Spring MVC编写的。我首先通过读取文件来模拟 SELECT t.*, CASE WHEN t.ENDTIME < m.MaxStartTime THEN 0 WHEN t.STARTTIME > m.MinEndTime THEN 0 ELSE 1 END AS Covered FROM @tbl AS t JOIN (SELECT DATES, MIN(ENDTIME) MinEndTime, MAX(STARTTIME) MaxStartTime FROM @tbl GROUP BY DATES) AS m ON t.DATES = m.DATES 并将其发送给客户端。

对于dynamic response generation方法,响应将包含GET标头而不是Transfer-Encoding: chunked标头。

对于Content-Length方法,我该如何实现响应?我应该手动插入HEAD标题并删除Transfer-Encoding: chunked标题吗?

Content-Length

我的客户的行为是:

  1. 首先发起@RestController public class ChunkedTransferAPI { @Autowired ServletContext servletContext; @RequestMapping(value = "xxx.iso", method = { RequestMethod.GET }) public void doChunkedGET(HttpServletResponse response) { String filename = "/xxx.iso"; try { ServletOutputStream output = response.getOutputStream(); InputStream input = servletContext.getResourceAsStream(filename); BufferedInputStream bufferedInput = new BufferedInputStream(input); int datum = bufferedInput.read(); while (datum != -1) { output.write(datum); //data transfer happens here. datum = bufferedInput.read(); } output.flush(); output.close(); } catch (IOException e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); } } @RequestMapping(value = "xxx.iso", method = { RequestMethod.HEAD }) public void doChunkedHEAD(HttpServletResponse response) { // response.setHeader("Server", "Apache-Coyote/1.1"); // response.setHeader("Transfer-Encoding", "chunked"); } } 请求以获取HEAD。此大小用于分配一些缓冲区。

  2. 然后发起anticipated response size请求以实际获取响应内容并将其放入缓冲区。

  3. 我有种感觉,我GET客户端的行为,而不是遵循一些RFC标准。我担心即使我能让客户满意我的回复,它也会因其他服务器的响应而失败。

    任何人都可以对此有所了解吗?我该如何实施HEAD响应? 或者客户端永远不应该依赖HEAD响应来决定GET响应的大小,因为RFC说:

      

    服务器 应该 发送相同的标题字段以响应HEAD   请求,如果请求是GET,它会发送, 除外   有效负载标题字段 (第3.3节) 可以省略

    catering to恰好是Content-Length之一。

0 个答案:

没有答案