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