今天项目中用到了写入流下载。代码如下。
HttpServletResponse reponse = super.getResponse();
reponse.setHeader("Content-Disposition", "attachment;filename=" + fileName);
reponse.setContentType("application/octet-stream");
reponse.setBufferSize(2048);
reponse.setContentLength(byteArr.length);
ServletOutputStream out = null;
try {
out = reponse.getOutputStream();
out.write(byteArr, 0, byteArr.length);
} catch (IOException e1) {
// TODO Auto-generated catch block
log.error(e1);
}
这段代码在项目中一直运行良好。。近日,有位兄弟,在这里面加入了点点代码。。
导致在 chorme 浏览器中,抛出异常。
异常如下
收到了来自服务器的重复标头 来自服务器的响应包含重复标头。此问题通常是由于网站或代理配置不正确导致的。只有网站或代理管理员才能解决此问题。 错误 349 (net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):我们收到了多个“Content-Disposition”标头。我们不允许此行为,以防遭到 HTTP 响应拆分攻击。
但使用其他IE8,IE9,firefox 都运行良好。。
于上上网一搜,,还真搜出一堆。。解决方法如下
原因是因为下载文件名中包含有逗号分隔符。。在所有的浏览器中,下载文件名不支持双字节字符。
参考请见 http://greenbytes.de/tech/tc2231/#attmultinstances
Content-Disposition: attachment; filename=foo,bar.html
^ (PARSE ERROR)
FF11 | warn (accepts the unquoted value) |
FF14 | warn (accepts the unquoted value) |
MSIE8 | warn (accepts the unquoted value) |
MSIE9 | warn (accepts the unquoted value) |
Opera | warn (accepts the unquoted value) |
Safari | warn (treats the comma as delimiter and offers to download "foo.html") |
Konq | pass (ignores thes header field) |
Chr17 | pass (reports a network error ("Duplicate headers received from server")) |
Chr18 | pass (reports a network error ("Duplicate headers received from server")) |
'attachment', specifying a filename of foo,bar.html
using a comma despite using token syntax.
相关推荐
解决跨域访问-需要设置HTTP响应标头设置
此回购包含在Puppeteer和Playwright中拦截响应的示例。 这些示例做什么: :wrench: 在或创建一个新的Chrome-Devtools-Protocol(CDP)会话。 :hammer: 启用Fetch域,让我们用自己的代码替代浏览器的网络层。 :...
Header Editor是一款管理浏览器请求的Chrome扩展,包括修改请求头、修改响应头、重定向请求、取消请求。 您可以从Redirector导入规则 规则说明: 1、匹配类型 规则会应用到满足相应匹配条件的URL上 全部:...
Http proxy,由VB6.0编写的代理服务器的源码,要... 收集所有必要信息后,它连接到真实服务器并传递标头数据。 打开程序后,可单击监听按钮,实现代码服务的监听功能,也可适时停止这个功能。 本源码来自于国外。
Chrome具有GPU硬件加速:当激活GPU硬件加速时,使用“Google Chrome”浏览那些含有大量图片之网站时可以更快渲染完成并使页面滚动时不会出现图像破裂的问题。 2013年4月份,Google宣布称将为Chrome浏览器开发新的...
主要给大家介绍了Asp.Net服务器发送HTTP标头后无法设置内容类型问题的解决方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
当响应即将写入标头时,执行一个侦听器。 安装 这是通过提供的模块。 使用完成 : $ npm install on-headers API var onHeaders = require ( 'on-headers' ) onHeaders(res,监听器) 当为res发出标题时,这将...
Chrome对于请求头和响应头的展示具有明确的规定,即控制台中只展示发送出去或刚接收到的路线。因此编辑后的请求链接,控制台的网络栏能够正常展示;而编辑后的响应分区由于不属于刚接收到的细分,所以从控制台上就...
以及引入了命令行工具 Appcmd.exe ,给 Web 服务器的日常管理、监视和配置提供了除图形接口外的另一种方式,更为简单、高效。 同Windows XP一样,在Windows Vista的默认设置下,IIS (Internet 信息服务) 7.0未予安装...
Rails应用程序的服务器时间标头
用于在基于Underwow的服务器(Wildfly,JBOSS EAP)中正确处理CORS标头Java EE的过滤器处理似乎有所疏忽,因为当容器配置了容器管理的授权并且尚未(尚未)通过身份验证的用户尝试访问受保护的资源时,容器将拦截该...
客户速率限制器一个简单的库,用于利用服务器速率限制响应标头来处理客户端HTTP受限制的请求。安装npm install --save client-rate-limiter 问题大多数http api实施速率限制机制来保护它们免受DoS攻击。 与此类...
推荐企业网站FLASH标头
此 nodeJS 应用程序将代理从本地主机上的一个端口到给定主机名/端口的流量,但会在此过程中添加一系列标头。 您可以通过在headers目录中创建带有您想要附加的内容的文件来控制这些标题。 例如,创建一个名为headers/...
这些标头包括但不限于User-Agent、Cookie、Referer等。modHeader提供了一个直观易用的界面,使用户能够快速设置自定义的HTTP请求标头。 使用modHeader插件,您可以模拟特定的请求标头,使服务器认为您是从特定设备...
[+]表示当前的服务器/软件标头(绿色) [-]表示缺少安全标头(红色) 将每个主机的文件输出到当前工作文件夹中的out目录,以便于导航结果。 gohead测试以下 HTTP 标头: 服务器 X-Powered-By X-AspNetMvc-版本 ...
代理/缓存服务器需要设置一个 clientip 标头才能使其工作。 默认情况下,此应用程序将查找 X-Forwarded-For 标头,除非在配置中指定了其他标头。 安装: $ apxs2 -a -i -c mod_vgremoteip.c 配置示例:...
etag-stoppa:Firefox的极简扩展,可无条件删除ETag响应标头
调试代理将允许您截取和变异来自网页的请求Netify是调试代理,将允许您截取和变异您的请求,例如Fiddler或Charles,但是它更紧凑并且可以直接在Chrome devtools中实现。 Netify为您提供的功能: 按URL,方法或资源...
该中间件实现了标头,可用于在Chrome DevTools上显示服务器端计时信息。 安装 使用安装: $ composer require tuupola/server-timing-middleware 使用简单 要获得默认时序,请将中间件添加到管道中。 使用它转到名...