GET 请求不适用于 Chrome --> net::ERR_CONTENT_LENGTH_MISMATCH
GET request not working on Chrome --> net::ERR_CONTENT_LENGTH_MISMATCH
我在 Java.
中使用 TCP 套接字构建了一个简单的并发 Web 服务器
当我向网络服务器发出 GET 请求时:
它在 Firefox 和 Internet Explorer 上运行良好,html 页面(一个非常简单的页面)加载正常,但在 Chrome.
上加载失败
问题是 Chrome 的响应是 200 OK Status,但是 html 页面的内容永远不会加载。在控制台上,在网络上,我得到下一个状态字段:
"(failed) net::ERR_CONTENT_LENGTH_MISMATCH"
但 Chrome 控制台中的响应 headers 如下(包括 content-length!!):
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
可能是响应headers的问题,我试过包括"Access-Control-Allow-Origin: *",但没有解决。
知道这个问题可能起源于哪里吗?如果您需要任何网络服务器代码,请不要犹豫,索取它。
可能是 Google Chrome 中的错误。
Heroku started seeing interrupted requests with Chrome 几个月前。
...the latest Chrome which I have seen other apps have issue with as well..
我 运行 遇到了类似的问题(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 正常且文件大小正确的 gif 文件的数据,但我无法让浏览器显示图像,它始终显示空图像替代文本。图片路径也可以。
我尝试了多种向客户端提供图像的方法,none 到目前为止对我有用。
我在 Java.
中使用 TCP 套接字构建了一个简单的并发 Web 服务器当我向网络服务器发出 GET 请求时:
它在 Firefox 和 Internet Explorer 上运行良好,html 页面(一个非常简单的页面)加载正常,但在 Chrome.
上加载失败问题是 Chrome 的响应是 200 OK Status,但是 html 页面的内容永远不会加载。在控制台上,在网络上,我得到下一个状态字段:
"(failed) net::ERR_CONTENT_LENGTH_MISMATCH"
但 Chrome 控制台中的响应 headers 如下(包括 content-length!!):
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
可能是响应headers的问题,我试过包括"Access-Control-Allow-Origin: *",但没有解决。
知道这个问题可能起源于哪里吗?如果您需要任何网络服务器代码,请不要犹豫,索取它。
可能是 Google Chrome 中的错误。
Heroku started seeing interrupted requests with Chrome 几个月前。
...the latest Chrome which I have seen other apps have issue with as well..
我 运行 遇到了类似的问题(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 正常且文件大小正确的 gif 文件的数据,但我无法让浏览器显示图像,它始终显示空图像替代文本。图片路径也可以。
我尝试了多种向客户端提供图像的方法,none 到目前为止对我有用。