GET 请求不适用于 Chrome --> net::ERR_CONTENT_LENGTH_MISMATCH

GET request not working on Chrome --> net::ERR_CONTENT_LENGTH_MISMATCH

我在 Java.

中使用 TCP 套接字构建了一个简单的并发 Web 服务器

当我向网络服务器发出 GET 请求时:

http://localhost:32000/examples/index.html

它在 Firefox 和 Internet Explorer 上运行良好,html 页面(一个非常简单的页面)加载正常,但在 Chrome.

上加载失败

问题是 Chrome 的响应是 200 OK Status,但是 html 页面的内容永远不会加载。在控制台上,在网络上,我得到下一个状态字段:

"(failed) net::ERR_CONTENT_LENGTH_MISMATCH"

但 Chrome 控制台中的响应 headers 如下(包括 content-length!!):

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 365
Access-Control-Allow-Origin: *

GET 请求:

    GET /example/index.html HTTP/1.1
    Host: localhost:32000
    Connection: keep-alive
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: es-ES,es;q=0.8,en;q=0.6

可能是响应headers的问题,我试过包括"Access-Control-Allow-Origin: *",但没有解决。

知道这个问题可能起源于哪里吗?如果您需要任何网络服务器代码,请不要犹豫,索取它。

可能是 Google Chrome 中的错误。

Heroku started seeing interrupted requests with Chrome 几个月前。

...the latest Chrome which I have seen other apps have issue with as well..

我 运行 遇到了类似的问题(Node.js 应用程序在 Heroku 上流式传输大型 xml 文件)。使用 https 时没有问题。在同一网络的不同计算机上使用(相同版本的)Chrome 没问题。

清除缓存并重新加载后,它仍然失败,但在解析 XML 时给出了不同的错误。所以,我清除了缓存并再次重新加载——问题消失了。

我终于找到了解决问题的方法。

它的工作原理是切换一段代码,即写入客户端输出的代码:

    out = new PrintWriter(client.getOutputStream());

    private void returnFileContent(File f) throws IOException{
        BufferedReader br = new BufferedReader(new FileReader(f));
        String linea;

        while ((line = br.readLine())!=null){
            out.println(line); out.flush();
        }
        br.close();
    }

之前我直接使用客户端outputStream。我仍然不太明白为什么它在 Firefox/Explorer 上有效但在 Chrome.

上无效

新问题

现在,我的服务器必须提供 gif 图像。这是我使用的代码:

    httpHeader= (h+" 200 OK \n" +
                            "Content-Type: image/gif"+"\n" +
                            "Content-Length: "+f.length()+"\n\n");
                    //Send header to the client
                    out.println(cabecera);
                    out.flush();
                    //Send gif file content to the cliente
                    returnGIF(f);


    private void returnGIF(File f) throws IOException{
        FileInputStream fis = new FileInputStream(f.getPath());
        int b=0;
        while ((b=fis.read()) != -1){
            out_bis.write(b);
        }
        fis.close();
    }

Web 浏览器正在获取状态为 200 正常且文件大小正确的 gif 文件的数据,但我无法让浏览器显示图像,它始终显示空图像替代文本。图片路径也可以。

我尝试了多种向客户端提供图像的方法,none 到目前为止对我有用。