【问题标题】:GET request not working on Chrome --> net::ERR_CONTENT_LENGTH_MISMATCHGET 请求在 Chrome 上不起作用 --> net::ERR_CONTENT_LENGTH_MISMATCH
【发布时间】:2015-04-28 13:03:03
【问题描述】:

我用 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: *" 但没有解决。

知道这个问题的根源吗?如果您需要任何网络服务器代码,请不要犹豫,立即索取。

【问题讨论】:

  • FWIW:我在 Chrome 上遇到了同样的问题。切换到https,它工作。切换回http,清除缓存并重新加载-仍然损坏。清除缓存并重新加载(第二次),现在它可以工作了。哎呀!注意:我的服务器使用了不同的技术(node.js 服务于一个大的 xml 文件),这让我怀疑 Chrome 是否有错误。
  • 清除缓存并重新加载后,该错误是否仍然存在?在同一网络上的其他机器上呢?
  • @two-bit-fool 这既不是解决方案,也不是我的问题,正如我在回答中解释的那样
  • Chrome 仍然是我心目中的主要嫌疑人,否则您会在其他浏览器中看到该错误。我怀疑您在服务器上所做的更改正在“解决”该错误,因为缓冲的响应在 Chrome 中使用了不同的代码路径。无论哪种方式,很高兴您找到了解决此问题的方法。干杯!

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


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

        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 文件数据,但我无法实现浏览器显示图像,它始终显示带有替代文本的空图像.图片的路径也可以。

    我尝试了不同的方法将图像提供给客户,但到目前为止没有一个对我有用。

    【讨论】:

    • 也许您可以将自己的答案标记为第一个问题的答案,并在新帖子中提出新问题。干杯!
    猜你喜欢
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2014-02-09
    相关资源
    最近更新 更多