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