私は、呼び出されたときに、応答とともに本文を返送する場合としない場合があるWebサービスを持っています。何らかの理由で、データがない場合は常にContent-Lengthヘッダーが存在しますが、本文を返送すると、Content-Lengthヘッダーの代わりにTransfer-Encoding:Chunkedヘッダーが存在します。送信されるリクエストは実際にはチャンク化されていますが、ペイロードをできるだけ小さくしたいので、必ずしもレスポンスである必要はありません。
次のコードが示すように、データが返送されるときにコンテンツの長さを強制しようとしましたが、それでも応答にはContent-Lengthヘッダーがありません。Transfer-Encoding:Chunkedヘッダーの存在は、COntent-Lengthヘッダーをオーバーライドすることを読みましたが、Transfer-Encodingヘッダーを削除する方法、またはそもそもなぜそこにあるのかさえわかりません。
これが新しいリクエストの私のコールバックです:
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setStatus(200);
String mac = req.getHeader("x-kcid");
String cmd = getCache(mac);
if (cmd != null) {
writeToStream(resp, cmd, "text/plain");
clearCache(mac);
}
}
そして、これが実際に応答を書き込むメソッドです。
private static void writeToStream(HttpServletResponse resp, String msg, String contentType) throws IOException {
resp.setContentType(contentType);
resp.setContentLength(msg.getBytes().length);
resp.getWriter().write(msg);
}