我正在开发一个带有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()?
谢谢!
查尔斯
答案 0 :(得分: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>
行。
禁用特定网页或特定请求的压缩
这些好人找到了办法:
Can gzip compression be selectively disabled in ASP.NET/IIS 7?
答案 1 :(得分:2)
如果您使用最多3个gzip压缩比,则IIS会提供分块页面。并且gzip比率3和9之间没有显着差异。Look at IIS compression ratio test