¿Por qué Tomcat devuelve diferentes encabezados para solicitudes HEAD y GET a mi API RESTful?

Mi propósito inicial era verificar elTransferencia fragmentada HTTP. Pero accidentalmente encontró esta inconsistencia.

La API está diseñada para devolver un archivo al cliente. yo sueloHEAD yGET métodos en contra de ella.Se devuelven diferentes encabezados.

porGET, Obtengo estos encabezados: (Esto es lo que esperaba).

porHEAD, Obtengo estos encabezados:

De acuerdo aeste hilo, HEAD yGET DEBERÍA devolver encabezados idénticos perono necesariamente.

Mi pregunta es:

SiTransfer-Encoding: chunked es usadoporque el archivo se alimenta dinámicamente al cliente y el servidor Tomcat no puede conocer su tamañoantemano, ¿cómo podría Tomcat saber elContent-Length cuandoHEAD Se utiliza el método? ¿Tomcat solocarrera en seco el controlador y cuenta todos los bytes del archivo? ¿Por qué no simplemente devuelve lo mismo?Transfer-Encoding: chunked ¿encabezamiento?

A continuación se muestra mi API RESTful implementada conSpring Web MVC:

@RestController
public class ChunkedTransferAPI {

    @Autowired
    ServletContext servletContext;

    @RequestMapping(value = "bootfile.efi", method = { RequestMethod.GET, RequestMethod.HEAD })
    public void doHttpBoot(HttpServletResponse response) {

        String filename = "/bootfile.efi";
        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);
                datum = bufferedInput.read();
            }
            output.flush();
            output.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

AGREGAR 1

En mi código, no agregué ningún encabezado explícitamente, entonces debe ser Tomcat el que agregue elContent-Length yTransfer-Encoding encabezados como mejor le parezca.

Entonces, ¿cuáles son las reglas para que Tomcat decida qué encabezados enviar?

AGREGAR 2

Quizás esté relacionado con el funcionamiento de Tomcat. Espero que alguien pueda arrojar algo de luz aquí. De lo contrario, depuraré la fuente de Tomcat 8 y compartiré el resultado. Pero eso puede llevar un tiempo.

Relacionado:

HTTP HEAD y OBTENER resultados diferentes

Encabezado de longitud de contenido con solicitudes HEAD?

Respuestas a la pregunta(2)

Su respuesta a la pregunta