private static void writeData( byte[] file, HttpServletResponse response )
throws IOException
{
....
// Send the data
response.setContentLength(file.length);
response.getOutputStream().write(file);
}最近,我在IE8中发现一些连接在请求下载文件时关闭。这是代码中的相关源代码,我想知道一次向响应输出流写入大字节数组是否会导致这个问题。这个问题是非常不可复制的,我经常看到的模式是一次写一定数量的字节,而不是同时写,以避免MTU问题,或者类似的事情。
这些代码会对我间歇性的IE问题负责吗?如果是,为什么,为什么只在IE?
编辑:
我尝试使用Cache-Control: no-cache,结果在IE中是灾难性的。

请求:
POST /myapplication/someAction.do?step=none&SAct=none HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, */*
Referer: https://myhost.myhost.com/myapplication/someAction.do?queryString=something
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; .NET4.0C; InfoPath.3)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: myhost.myhost.com
Content-Length: 1644
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=GnvHMYyGx9QrmpVQfBSgNXnPM8nQJ21dT82KhmSSTXRRT1mgB8tP!299858932; [truncated]响应:
HTTP/1.1 200 OK
Cache-Control: no-cache
Date: Tue, 21 Sep 2010 18:00:56 GMT
Transfer-Encoding: chunked
Content-Type: application/ZIP
Content-Disposition: inline; filename=ActivityReport.ZIP
X-Powered-By: Servlet/2.5 JSP/2.1发布于 2010-09-20 22:27:00
您是否设置响应的缓存信息?(日期、缓存控制等)
我在IE中看到了很多这种行为,并且总是与IE的缓存实现有关,它不是发送HEAD请求来检查内容的有效性,而是发送完整的GET请求,然后使用headers来确定其缓存内容的有效性,如果它确定缓存的版本是有效的,那么就关闭连接,因此服务器端会出现许多“断管”样式错误。
要验证这种情况,请尝试发送缓存控制头,以便IE始终必须下载全部内容。
发布于 2010-09-20 21:08:17
应用程序创建的写入(和刷新)模式可能会对数据包的形成和发送方式产生影响,但这似乎是最好的设置:内核从一开始就有关于要发送的数据的完整信息,并且可以自由选择数据的最佳分组化。
这似乎不太可能是造成客户问题的原因。发送可能会冲洗大量小数据包的分块输出将更加可疑。
https://stackoverflow.com/questions/3755398
复制相似问题