0
我想使一個Web服務器,使用數據庫來響應通過URI引入的某些查詢。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沒有。
謝謝!
如果你提到的2個瀏覽器不顯示任何錯誤或文本,你會在哪裏看到ERR_CONTENT_LENGTH_MISMATCH? – f1sh
您似乎發送了result.length()的內容長度,但這可能與result.getBytes()。length不同 - 取決於結果字符串的編碼和值,因此存在不匹配錯誤。因此,請將'result.getBytes()。length'作爲內容長度發送。 – wero
@ f1sh請參閱修改。 –