从服务器收到重复的标头

问题描述 投票:0回答:7

从服务器收到重复的标头

服务器的响应包含重复的标头。此问题通常是由于网站或代理配置错误造成的。只有网站或代理管理员才能解决此问题。

错误 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();

如何解决这个问题?

google-chrome pdf http-headers
7个回答
255
投票

这个有点旧,但在谷歌排名很高,所以我想我应该把我从 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;
    }

106
投票

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

例如:

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

6
投票

只需在文件名周围加上一对双引号,如下所示:

this.Response.AddHeader("内容处置", $"附件; 文件名=\"{outputFileName}\"");


6
投票

对我来说,问题在于逗号不在文件名中,而是如下:-

Response.ok(streamingOutput,MediaType.APPLICATION_OCTET_STREAM_TYPE).header("内容处置","附件,文件名=your_file_name").build();

我不小心在附件后面加了一个逗号。通过用分号替换逗号来解决它。


4
投票

标头中的文件名周围的双引号是每个 MDN Web 文档的标准。省略引号会为文件名中的字符引起的问题带来多种机会。


0
投票

从 EDGE 下载名为

的动态文件时,我遇到了同样的错误 (ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION)

“a、b、c 测试.zip”

问题是逗号。

奇怪的是,使用旧的“互联网浏览器”,逗号不是问题,并且下载了相同的文件(相同的过程相同的文件)。使用其他浏览器出现错误。

解决方法:如果使用改进的浏览器,则规范化文件名(通过代码),将任何逗号替换为下划线。


0
投票

今天我收到了同样的错误,但因为输出文件的名称中有一个带有西班牙语重音的字母

直到今天,.net Web 表单页面在 IIS Win2012 服务器上都工作正常。

奇怪的是,该页面在我的 Win11 工作站中运行良好

两台计算机上的 Chrome 版本均为 124.0.6367.119(官方版本)(64 位)

© www.soinside.com 2019 - 2024. All rights reserved.