3

我正在开发一个带有 ASP 服务器端的 Web 应用程序,并且我使用 iframe 进行数据推送。

一个 ASP 处理程序会每隔一段时间将一些 javascript 刷新到 iframe:

context.Response.Write("<script language='javascript'>top.update('lala');</script>");
context.Response.Flush();

我的问题是有时,当我收到数据时,我没有得到全文。例如,我会收到这样的信息:<script language='javascript'>update('lala');</ 不幸的是,如果在下一秒左右没有其他数据出现,这会阻止执行 javascript 代码。

我的一种解决方法是每 500 毫秒有一个线程刷新'...​​....'。(然后我会收到script>......这将完成我的 javascript。)

但是我确信必须有办法让 Response.Flush() 发送整个数据块。有人知道如何正确使用 Response.Flush() 吗?

谢谢!

查尔斯

4

2 回答 2

3

我的一位同事发现了这个问题。IIS 上启用了 Gzip 压缩,这会阻止 Web 浏览器获取完整的数据块。

在解决方案中:

禁用所有网站的压缩:

对于 IIS 5.1,请转到Control Panel/Administrative Tools/Internet Information Services. 右键单击Web Sites,单击properties并删除 ISAPI 过滤器Compression

对于 IIS 7,请转到My Documents/IISExpress/config/applicationHost.config并更改部分httpCompression,以便不为您的特定页面启用压缩。

仅为您的网站禁用压缩:

在您的应用程序文件中,在 部分下web.config添加行。<urlCompression doStaticCompression="true" doDynamicCompression="false"/><system.webServer>

禁用特定网页或特定请求的压缩

这些好人找到了一种方法:

可以在 ASP.NET/IIS 7 中选择性地禁用 gzip 压缩吗?

于 2012-07-05T14:55:04.887 回答
2

如果您使用高达 3 的 gzip 压缩比,IIS 将提供分块页面。并且gzip比3和9没有显着差异。看IIS压缩比测试

于 2012-08-03T06:05:39.200 回答