提问人:seewhathadhappenedwas 提问时间:7/22/2017 最后编辑:Dale Kseewhathadhappenedwas 更新时间:2/15/2023 访问量:2647
解决HTTP2下载失败网络错误
Solve HTTP2 Download Failed Network Error
问:
环境
- ASP.NET 网站
- .NET 4.6.1
- 在 Windows Server 上的 IIS 10.0 中托管 2016.
Web.Config:
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthentication" />
</modules>
按钮点击:
protected void btnDownload_Click(object sender, System.EventArgs e)
{
try
{
string sPDFFilename = "doc.pdf";
byte[] data = GetData();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "Attachment; filename=" + sPDFFilename);
Response.AddHeader("content-length", (data.Length.ToString()));
Response.BinaryWrite(data);
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
catch(Exception ex){ throw; }
}
问题:在第一次回发时,浏览器使用HTTP2作为其协议,下载失败。Chrome 网站“网络错误 - 下载失败"
再次单击同一链接,协议将回退到 http/1.1,下载成功。
- 当前语法是否适用于在 HTTP2 下交付文件?
- 是否可以在 IIS10/ASP.NET 4.6.1 中强制使用 http/1.1?
答:
0赞
Henri Kulotie
2/15/2023
#1
在 HTTP2 中,如果文件名包含非 US-ASCII 字符,则大多数浏览器将无法解析文件名。HTTP1.1 的实现对此更加宽松。
要仍然支持 utf-8 文件名,您可以使用带有 url 编码值的 filename* 属性。
目前最支持的 Content-Disposition 格式是:
attachment; filename="<us-ascii filename>"; filename*=utf-8''<url-encoded-utf-8-filename>
即。
attachment; filename="EURO rates"; filename*=utf-8''%e2%82%ac%20rates
评论