0
URIを使用して導入された特定のクエリに応答するデータベースを使用するWebサーバーを作成しようとしています。Java HttpServer - ERR_CONTENT_LENGTH_MISMATCH
問題はHTTPハンドラに関連しています。 ChromeはERR_CONTENT_LENGTH_MISMATCHを返します。
私はJavaのマニュアルの例に従っており、理論的にはうまくいくはずです。 IEとEdgeはエラーやテキストを表示しません。
何か間違っている場合は一見して教えてください。
private class QueryHandler implements HttpHandler {
private Map<String, String> parameters;
private String result;
private OutputStream os;
@Override
public void handle(HttpExchange exchange) throws IOException {
parameters = this.extractParameters(exchange.getRequestURI().getRawQuery());
result = dbController.jsonQueryResponse(parameters.get("year"), parameters.get("day"), parameters.get("category")).toString();
exchange.getResponseHeaders().set("Content-Type", "application/json; charset=UTF-32");
exchange.sendResponseHeaders(200, result.getBytes("UTF-32").length);
os.write(result.getBytes("UTF-32"));
exchange.close();
}
private Map<String, String> extractParameters(String query){
Map<String, String> toBeReturned = new HashMap<>();
for(String parameterValue : query.replaceFirst("\\?", "").split("&")){
String[] parameter = parameterValue.split("=");
toBeReturned.put(parameter[0], parameter[1]);
}
return toBeReturned;
}
}
興味深い事実:
- エッジ私はtxtファイルをダウンロードします。ここ
は、コードがあります。
- IEではありません。
ありがとうございます!
ERR_CONTENT_LENGTH_MISMATCHここに2つのブラウザでエラーやテキストが表示されない場合は、どこに表示されますか? – f1sh
あなたは 'result.length()'のコンテンツ長を送っているようですが、これは 'result.getBytes()。length'と異なるかもしれません - 結果の文字列のエンコーディングと値に依存して、ミスマッチエラーです。代わりに 'result.getBytes()。length'をcontent-lengthとして送信してください。 – wero
@ f1sh編集内容をご覧ください。 –