从服务器收到重复的标头
服务器的响应包含重复的标头。此问题通常是由于网站或代理配置错误造成的。只有网站或代理管理员才能解决此问题。
错误 349 (net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):收到多个不同的 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();
如何解决这个问题?
这个有点旧,但在谷歌排名很高,所以我想我应该把我从 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 + "\"");
只需在文件名周围加上一对双引号,如下所示:
this.Response.AddHeader("内容处置", $"附件; 文件名=\"{outputFileName}\"");
对我来说,问题在于逗号不在文件名中,而是如下:-
Response.ok(streamingOutput,MediaType.APPLICATION_OCTET_STREAM_TYPE).header("内容处置","附件,文件名=your_file_name").build();
我不小心在附件后面加了一个逗号。通过用分号替换逗号来解决它。
标头中的文件名周围的双引号是每个 MDN Web 文档的标准。省略引号会为文件名中的字符引起的问题带来多种机会。
从 EDGE 下载名为
的动态文件时,我遇到了同样的错误 (ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION)“a、b、c 测试.zip”
问题是逗号。
奇怪的是,使用旧的“互联网浏览器”,逗号不是问题,并且下载了相同的文件(相同的过程相同的文件)。使用其他浏览器出现错误。
解决方法:如果使用改进的浏览器,则规范化文件名(通过代码),将任何逗号替换为下划线。
今天我收到了同样的错误,但因为输出文件的名称中有一个带有西班牙语重音的字母
直到今天,.net Web 表单页面在 IIS Win2012 服务器上都工作正常。
奇怪的是,该页面在我的 Win11 工作站中运行良好
两台计算机上的 Chrome 版本均为 124.0.6367.119(官方版本)(64 位)