从服务器收到重复的标头
来自服务器的响应包含重复的标头。此问题通常是由于网站或代理配置错误造成的。只有网站或代理管理员可以解决此问题。
错误349(网络::错误响应标题多个内容处置):收到多个不同的Content-Disposition标头。为了防止HTTP响应拆分攻击,不允许这样做。
在chrome中导出为pdf时发现此错误。
Response.Buffer = false;
Response.ClearHeaders();
string ext = objProp.PACKAGEFILENAME.Substring(objProp.PACKAGEFILENAME.LastIndexOf("."));
string ext1 = ext.Substring(1);
Response.ContentType = ext1;
Response.AddHeader("Content-Disposition", "target;_blank,attachment; filename=" + objProp.PACKAGEFILENAME);
const int ChunkSize = 1024;
byte[] binary = objProp.PACKAGEDOCUMENT;
System.IO.MemoryStream ms = new System.IO.MemoryStream(binary);
int SizeToWrite = ChunkSize;
for (int i = 0; i < binary.GetUpperBound(0) - 1; i = i + ChunkSize)
{
if (!Response.IsClientConnected) return;
if (i + ChunkSize >= binary.Length) SizeToWrite = binary.Length - i;
byte[] chunk = new byte[SizeToWrite];
ms.Read(chunk, 0, SizeToWrite);
Response.BinaryWrite(chunk);
Response.Flush();
}
Response.Close();
如何解决这个问题?
6条答案
按热度按时间tzxcd3kk1#
这一个有点老,但在谷歌排名很高,所以我想我会扔在答案,我发现从Chrome, pdf display, Duplicate headers received from the server
基本上我的问题也是文件名包含逗号。做一个逗号替换删除他们,你应该没事。我的函数,使一个有效的文件名如下。
huwehgph2#
服务器应该在文件名周围加上双引号,正如@cusman和@Touko在他们的回复中提到的那样。
例如:
mi7gmzs63#
只需在文件名周围加上一对双引号,如下所示:
此.响应.AddHeader(“内容-处置”,$“附件;文件名="{输出文件名}"”);
kcwpcxri4#
对我来说,这个问题是关于一个逗号,而不是在文件名,但如下:-
响应.ok(流输出,媒体类型.应用程序_OCT_STREAM_TYPE).header(“内容处置”,“附件,文件名=您的文件名”).build();
我不小心在附件后面放了一个逗号。用分号代替逗号解决了这个问题。
xlpyo6sf5#
标头中文件名周围的双引号是MDN web docs.的标准,省略引号会为文件名中的字符引起的问题创造许多机会。
vdgimpew6#
我从EDGE下载名为的动态文件名时遇到了相同的错误(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION)
“a,B,ctest.zip“
问题是逗号。
奇怪的是,使用旧的“internet explorer”,逗号没有问题,下载了相同的文件(相同的过程相同的文件)。使用其他浏览器出现错误。
变通办法:如果使用的是改进型浏览器,则将文件名(通过代码)标准化,将任何逗号替换为下划线。