从服务器收到的重复报头

从服务器收到的重复报头

来自服务器的响应包含重复的标题。这个问题通常是由于网站或代理配置错误造成的。只有网站或代理管理员可以解决这个问题。

错误349(net: : ERR _ RESPONSE _ HEADERS _ ULTIPLE _ CONTENT _ DISPOSITION) : 接收到多个不同的内容-处置头。这是不允许的,以防止 HTTP 响应分裂攻击。

我发现这个错误,而导出到 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();

怎么补救?

129800 次浏览

这是一个有点老,但在谷歌排名高,所以我认为我会扔在我从 Chrome,pdf 显示,从服务器收到的重复头文件找到的答案

基本上,我的问题还在于文件名中包含逗号。对逗号进行替换以删除它们,这样就可以了。下面是我创建有效文件名的函数。

    public static string MakeValidFileName(string name)
{
string invalidChars = Regex.Escape(new string(System.IO.Path.GetInvalidFileNameChars()));
string invalidReStr = string.Format(@"[{0}]+", invalidChars);
string replace = Regex.Replace(name, invalidReStr, "_").Replace(";", "").Replace(",", "");
return replace;
}

服务器 应该在文件名周围加上双引号,正如@cusman 和@Touko 在他们的回复中提到的那样。

例如:

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");

像这样在你的文件名周围放一对双引号:

AddHeader (“ Content- 处置”,$“附件; filename = “{ outputFileName }””) ;

对我来说,问题不在于文件名,而在于下面的逗号:-

Ok (stream ingOutput,MediaType.APPATION _ OCTET _ STREAM _ TYPE) . header (“ content-position”,“ 附件,文件名 = your _ file _ name”) . build () ;

我不小心在附件后面加了一个逗号。用分号代替逗号解决了这个问题。

标题中文件名周围的双引号是每个 MDN 网络文档。的标准。省略双引号会为文件名中的字符引起的问题创造多个机会。