【发布时间】:2012-11-14 17:33:11
【问题描述】:
从服务器收到重复的标头
来自服务器的响应包含重复的标头。此问题通常是由于网站或代理配置错误造成的。只有网站或代理管理员可以解决此问题。
错误 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 中)。我在想一定有办法告诉它 filename="abc,xyz.pdf" 是有效的。我知道我们可以用其他东西替换“,”,但我想保留并返回原样的文件名。我试过的其他浏览器(IE、FireFox、Safari、Opera)都没有这个问题。
-
所以有一种方法可以让它在文件名中仍然有逗号。只需要引用文件名。
Response.AddHeader("content-disposition", "attachment; filename=\"" + FileNameWithCommas + "\""); -
谢谢@cusman。这正是我的问题 - 文件名中的逗号,只有 Chrome 对此有问题。
标签: google-chrome pdf http-headers