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。在此表示感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗