从服务器收到的重复标头
来自服务器的响应包含重复的标头。此问题通常是配置错误的网站或代理的结果。只有网站或代理管理员才能解决此问题。
错误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();
如何解决这个问题?
答案 0 :(得分:213)
这个有点旧但谷歌排名很高,所以我想我会从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;
}
答案 1 :(得分:87)
服务器应该在文件名周围添加双引号,如@cusman和@Touko在回复中所述。
例如:
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
答案 2 :(得分:5)
对我来说问题是关于逗号不在文件名中,但如下所示: -
Response.ok(streamingOutput,MediaType.APPLICATION_OCTET_STREAM_TYPE).header(&#34; content-disposition&#34;,&#34; 附件,文件名 = your_file_name&#34;)。build( );
附件后我不小心写了一个逗号。通过用分号替换逗号来解决它。
答案 3 :(得分:2)
只需在文件名周围放一对双引号,如下所示:
this.Response.AddHeader(“Content-disposition”,$“attachment; filename = \”{outputFileName} \“”);
答案 4 :(得分:0)
根据MDN web docs.,标头中文件名周围的双引号是标准的。