IE6异常 Connection reset by peer: socket write error



IE6异常 Connection reset by peer: socket write error

通过设定struts2的返回类型为stream来输出文件。配置类似:
<action name=”SomeDownload” class=”SomeAction” method=”downloadFile”>
<result type=”stream”>
<param name=”contentType”>application/vnd.ms-excel</param>
<param name=”contentDisposition”>attachment;filename=”${downloadFileName}”</param>
<param name=”inputName”>downloadFile</param>
</result>
</action>
在 ie8中点击下载返回正常,但是在ie6中报异常:“Connection reset by peer: socket write error”。推测是由于ie6和ie8在处理请求方式上不同,ie8中有标签页,一个窗口一个会话但是可以有多个标签页公用一个会话。但是ie6是没有 标签页的。

解决方法是:必须要在新窗口或父窗口中返回输出流。
例如用一个form来发出请求,并设置target=”_parent”
<form name=”frm” id=”frm” target=”_parent”>
<input type=”hidden” name=”downloadFileName” id=”downloadFileName” value=”" />
</form>
或者如果用到iframe,可以用设为父窗口的方式
parent.window.location.href=”/SomeDownload.action?downloadFileName=”+encodeURIComponent(filename);

不管什么方式ie8都是可以正常返回的。