gpt4 book ai didi

asp.net - 为什么异步 ASHX 生成的图像在 IE6 中并不总是有效?

转载 作者:行者123 更新时间:2023-12-01 23:26:48 27 4
gpt4 key购买 nike

如果你使用继承IHttpAsyncHandler的WebHandler,你应该不会注意到在不确定的特定情况下浏览器MS IE6不会显示它,请求永远不会完成。有解决办法吗?

最佳答案

我会自己回答,但我第一次遇到这个问题时花了3天时间才解决。

当通过“img”HTML 标签的“src”属性请求图片时,在某些情况下浏览器 MS IE6 需要 Content-Length 来完成请求并显示结果。

同步 ASHX 生成的图像,自动包含“Content-Length”HTTP header ,但异步版本不包含。所以当你写输出的时候,先把它写到一个内存流中,读取总长度,把它写成一个 HTTP 头,然后把内存流写到输出中。

像这样:

using (Image resizedImage = generateImage())
{
using (MemoryStream memoryStream = new MemoryStream())
{
resizedImage.Save(memoryStream, ImageFormat.Jpeg);
context.Response.AddHeader("Content-Length", memoryStream.Length.ToString());
memoryStream.WriteTo(context.Response.OutputStream);
}
}

我已经 tcpdump 了我的代码的同步和异步版本,我注意到它们之间还有 2 个不同之处:

1) 异步处理程序将应答分成 3 个 TCP 数据包,而不是一个。

2) 同步版本使用不同的“Keep-Alive” header (我不记得是哪个)

关于asp.net - 为什么异步 ASHX 生成的图像在 IE6 中并不总是有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/389503/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com