ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION:Excel导出报错,浏览器崩溃。

服务端设置的响应头:

1
2
3
4
5
6
7
8
9
header('pragma:public');
  
header('Content-type:application/vnd.ms-excel;charset=utf-8;name = "'.$xlsTitle.'.xls"');
  
header("Content-Disposition:attachment;filename = '{$fileName}.xls'");//attachment新窗口打印inline本窗口打印
  
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  
$objWriter->save('php://output');

  

错误原因:

1
Content-Disposition:attachment该行header头中filename 需要引号包裹。上图是已经修复的。

  

项目使用浏览器 :Chrome;

 

详解:上述问题,是浏览器中filename中包含特殊的标点符号,浏览器误认为是HTTP 响应拆分攻击。所以在filename中加引号包裹,以告诉浏览器是一个文件名。大多文章提供的是filename中包含标点符号(,)。实际中并无运用该符号,而是(.)。故认为可能特殊符号都会出现问题。

Content-Disposition:

在HTTP场景中,第一个参数或者是inline(默认值,表示回复中的消息体会以页面的一部分或者整个页面的形式展示),或者是attachment(意味着消息体应该被下载到本地;大多数浏览器会呈现一个“保存为”的对话框,将filename的值预填为下载后的文件名,假如它存在的话)。

1
2
3
4
5
Content-Disposition: inline
  
Content-Disposition: attachment
  
Content-Disposition: attachment; filename="filename.jpg"

  

作为multipart body中的消息头

在HTTP场景中。第一个参数总是固定不变的form-data;附加的参数不区分大小写,并且拥有参数值,参数名与参数值用等号(=)连接,参数值用双引号括起来。参数之间用分号(;)分隔。

1
2
3
4
5
Content-Disposition: form-data
  
Content-Disposition: form-data; name="fieldName"
  
Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"

  

本文内容,有摘自其他内容https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Disposition。在此表示感谢!

posted on   ygunoil  阅读(1150)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示