【问题标题】:Java HttpServer - ERR_CONTENT_LENGTH_MISMATCHJava HttpServer - ERR_CONTENT_LENGTH_MISMATCH
【发布时间】:2016-07-25 14:31:37
【问题描述】:

我正在尝试创建一个使用数据库来响应通过 URI 引入的某些查询的网络服务器。

我遇到的问题与 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;
    }
}

有趣的事实:

  • Edge 让我下载一个 txt 文件。
  • IE 没有。

谢谢!

【问题讨论】:

  • 如果您提到的 2 个浏览器没有显示任何错误或文本,您在哪里看到 ERR_CONTENT_LENGTH_MISMATCH?
  • 您似乎发送了 result.length() 的内容长度,但这可能与 result.getBytes().length 不同 - 取决于结果字符串的编码和值,因此会出现不匹配错误。所以将result.getBytes().length 作为内容长度发送。
  • @f1sh 请查看编辑。
  • @wero 我已经尝试过了,但它不起作用(在写到这里之前我又尝试了一次以更加确定)。
  • @PetruDanielTudosiu 至少这消除了可能的错误来源。您还应该使用String.getBytes(CharSet) 显式控制编码并在内容类型标头中宣布编码

标签: java json http server


【解决方案1】:

发现问题,我需要将内容类型设置为application/json。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2014-05-24
    • 1970-01-01
    • 2021-12-14
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多