128

从服务器收到重复的标头

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

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

如何解决这个问题?

4

5 回答 5

248

这有点旧,但在谷歌排名中很高,所以我想我会抛出我从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;
    }
于 2013-02-12T16:10:57.840 回答
106

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

例如:

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
于 2014-09-15T08:46:26.050 回答
6

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

this.Response.AddHeader("Content-disposition", $"attachment; filename=\"{outputFileName}\"");

于 2016-02-29T22:54:27.107 回答
6

对我来说,问题是关于不在文件名中的逗号,但如下所示: -

Response.ok(streamingOutput,MediaType.APPLICATION_OCTET_STREAM_TYPE).header("content-disposition", " attachment, filename =your_file_name").build();

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

于 2017-06-28T18:34:50.580 回答
2

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

于 2019-01-13T11:38:06.630 回答