Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取请求在Chrome上不起作用-->;网络::错误内容长度不匹配_Java_Sockets_Google Chrome_Http_Http Headers - Fatal编程技术网

Java 获取请求在Chrome上不起作用-->;网络::错误内容长度不匹配

Java 获取请求在Chrome上不起作用-->;网络::错误内容长度不匹配,java,sockets,google-chrome,http,http-headers,Java,Sockets,Google Chrome,Http,Http Headers,我用Java构建了一个带有TCP套接字的简单并发web服务器 当我向web服务器发出GET请求时: 它在Firefox和InternetExplorer上运行良好,html页面(一个非常简单的页面)加载正常,但不在Chrome上 问题是Chrome的响应是200 OK状态,但html页面的内容从未加载。在控制台和网络中,我得到下一个状态字段: “(失败)网络::内容错误\u长度不匹配” 但是Chrome控制台中的响应标题如下(包括内容长度!!): 获取请求: GET /example/

我用Java构建了一个带有TCP套接字的简单并发web服务器

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

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

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

“(失败)网络::内容错误\u长度不匹配”

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

获取请求:

    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
可能是一个响应头问题,我尝试过包括“访问控制允许源代码:”,但没有解决它


知道这个问题可能来自何处吗?如果您需要任何web服务器代码,请不要犹豫。

可能是Google Chrome中的一个bug。

几个月前

…我见过的最新Chrome应用程序也有问题

我遇到了类似的问题(一个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 OK且文件大小正确的gif文件的数据,但我无法实现浏览器显示图像的功能,它始终显示带有可选文本的空图像。图像的路径也可以


我尝试过不同的方法向客户提供图像,但迄今为止没有一种对我有效。

FWIW:我在Chrome上遇到了同样的问题。切换到https,它工作了。切换回http,清除缓存并重新加载--仍然损坏。清除缓存并重新加载(第二次),现在它可以工作了。哎呀!注意:我的服务器使用了不同的技术(node.js提供了一个大的xml文件),这让我想知道Chrome是否有bug。清除缓存并重新加载后,bug是否会持续存在?在同一网络上的其他机器上呢?@两个小傻瓜这不是解决方案,正如我在回答中所解释的,在我的情况下,问题也不是问题。在我的脑海中,Chrome仍然是主要的嫌疑犯,否则你会在其他浏览器中看到这个bug。我怀疑您在服务器上所做的更改正在“解决”这个bug,因为缓冲响应在Chrome中使用了不同的代码路径。不管怎样,很高兴你找到了解决这个问题的方法。干杯也许你可以将自己的答案标记为第一个问题的答案,然后在新帖子中提出新问题。干杯
    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();
    }