Warum gibt Tomcat verschiedene Header für HEAD- und GET-Anforderungen an meine RESTful-API zurück?

Mein ursprünglicher Zweck war es, das @ zu überprüfHTTP Chunked Transfer. Aber aus Versehen fand diese Inkonsistenz.

Die API gibt eine Datei an den Client zurück. Ich benutzeHEAD undGET Methoden dagegen.Different Header werden zurückgegeben.

ZumGET, Ich bekomme folgende Header: (Das habe ich erwartet.)

ZumHEAD, Ich bekomme diese Header:

Gemäßdieser Thread, HEAD undGET SOLLT identische Header zurückgeben, abernicht unbeding.

Meine Frage ist

WennTransfer-Encoding: chunked wird genutztd Die Datei wird dynamisch an den Client übertragen, und der Tomcat-Server kann die Größe nicht ermitteln.vorwe, wie könnte Tomcat das @ kennContent-Length wannHEAD Methode wird verwendet? Hat Tomcat nurProbelau der Handler und zählen alle Dateibytes? Warum gibt es nicht einfach das gleiche @ zurücTransfer-Encoding: chunked Header

Below ist meine RESTful API implementiert mitSpring 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();
        }

    }

}

ADD 1

In meinem Code habe ich keine Header explizit hinzugefügt, dann muss es Tomcat sein, der das @ hinzufügContent-Length undTransfer-Encoding Header wie es passt.

Also, nach welchen Regeln entscheidet Tomcat, welche Header gesendet werden sollen?

ADD 2

Möglicherweise hängt es damit zusammen, wie Tomcat funktioniert. Ich hoffe, hier kann jemand etwas Licht ins Dunkel bringen. Andernfalls debugge ich in der Quelle von Tomcat 8 und teile das Ergebnis. Aber das kann eine Weile dauern.

Verbunden

HTTP HEAD und GET unterschiedliches Ergebnis

Content-Length-Header mit HEAD-Anforderungen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage