我在Java中使用TCP套接字构建了一个简单的并发Web服务器。
当我向我的网络服务器发出GET请求时:
它在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:*”,但它还没有解决它。
想知道这个问题可能源于何处?如果您需要任何一个网络服务器代码,请不要犹豫。
答案 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文件的数据,但是我无法完成浏览器显示图像,它总是显示一个空图像替代文字。图像的路径也可以。
我尝试过不同的方法向客户提供图像,到目前为止,它们都没有对我有效。