GET请求无法在Chrome上运行 - >网:: ERR_CONTENT_LENGTH_MISMATCH

时间:2015-02-26 08:29:23

标签: java sockets google-chrome http http-headers

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

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

  

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

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

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

  

“(失败)net :: ERR_CONTENT_LENGTH_MISMATCH”

但Chrome控制台中的响应标题如下(包含内容长度!!):

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

可能是响应标头问题,我试过包括“Access-Control-Allow-Origin:*”,但它还没有解决它。

想知道这个问题可能源于何处?如果您需要任何一个网络服务器代码,请不要犹豫。

2 个答案:

答案 0 :(得分:0)

可能是Google Chrome中的一个错误。

几个月前

Heroku started seeing interrupted requests with Chrome

  

...我见过其他应用程序的最新Chrome也有问题..

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

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

答案 1 :(得分:0)

最后,我发现自己是解决问题的方法。

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

    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();
    }

网页浏览器正在获取具有200状态确定和正确文件大小的gif文件的数据,但是我无法完成浏览器显示图像,它总是显示一个空图像替代文字。图像的路径也可以。

我尝试过不同的方法向客户提供图像,到目前为止,它们都没有对我有效。