2016-04-05 31 views
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ではありません。

ありがとうございます!

+0

ERR_CONTENT_LENGTH_MISMATCHここに2つのブラウザでエラーやテキストが表示されない場合は、どこに表示されますか? – f1sh

+0

あなたは 'result.length()'のコンテンツ長を送っているようですが、これは 'result.getBytes()。length'と異なるかもしれません - 結果の文字列のエンコーディングと値に依存して、ミスマッチエラーです。代わりに 'result.getBytes()。length'をcontent-lengthとして送信してください。 – wero

+0

@ f1sh編集内容をご覧ください。 –

答えて

0

問題が見つかりました。コンテンツタイプをapplication/jsonに設定する必要がありました。

関連する問題