Chrome 从服务器收到重复的标头

dldeef67  于 2023-02-01  发布在  Go
关注(0)|答案(6)|浏览(172)

从服务器收到重复的标头
来自服务器的响应包含重复的标头。此问题通常是由于网站或代理配置错误造成的。只有网站或代理管理员可以解决此问题。
错误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();

如何解决这个问题?

tzxcd3kk

tzxcd3kk1#

这一个有点老,但在谷歌排名很高,所以我想我会扔在答案,我发现从Chrome, pdf display, Duplicate headers received from the server
基本上我的问题也是文件名包含逗号。做一个逗号替换删除他们,你应该没事。我的函数,使一个有效的文件名如下。

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;
    }
huwehgph

huwehgph2#

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

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

mi7gmzs63#

只需在文件名周围加上一对双引号,如下所示:
此.响应.AddHeader(“内容-处置”,$“附件;文件名="{输出文件名}"”);

kcwpcxri

kcwpcxri4#

对我来说,这个问题是关于一个逗号,而不是在文件名,但如下:-
响应.ok(流输出,媒体类型.应用程序_OCT_STREAM_TYPE).header(“内容处置”,“附件,文件名=您的文件名”).build();
我不小心在附件后面放了一个逗号。用分号代替逗号解决了这个问题。

xlpyo6sf

xlpyo6sf5#

标头中文件名周围的双引号是MDN web docs.的标准,省略引号会为文件名中的字符引起的问题创造许多机会。

vdgimpew

vdgimpew6#

我从EDGE下载名为的动态文件名时遇到了相同的错误(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION)
“a,B,ctest.zip“
问题是逗号。
奇怪的是,使用旧的“internet explorer”,逗号没有问题,下载了相同的文件(相同的过程相同的文件)。使用其他浏览器出现错误。
变通办法:如果使用的是改进型浏览器,则将文件名(通过代码)标准化,将任何逗号替换为下划线。

相关问题