1

这看起来很愚蠢 - 我一定错过了一些明显的东西。我有以下代码(仅作为测试):

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    void page_load(object o, EventArgs e)
    {
        Response.Write(new string(' ', 255));
        Response.Flush();
        for (int i = 0; i < 10; i++)
        {
            Response.Write(i + "<BR>");
            Response.Flush();
            System.Threading.Thread.Sleep(500);
        }

    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        main div
    </div>
    </form>
</body>
</html>

当我在本地测试这个(vista x64,cassini)时,我得到了所需的输出.. 1,然后 2,然后 3 等都以非缓冲方式发送到浏览器。当我在开发服务器(2003,iis6)上尝试此操作时,它只是将所有内容缓冲并一次发送。有什么明显的我失踪了吗?我也尝试将 buffer=false 放在顶部,但这也不会改变这种行为。

为了进一步澄清,我用 fiddler 做了一个测试来比较两台服务器。第一个服务器是局域网上的本地服务器,第二个是公共服务器。fiddler 发现两者之间没有明显的区别,除了主机名。LAN服务器在页面加载完成之前没有写出响应,公共服务器在发生时写出响应。我还可以确认这种行为发生在 Firefox 和 ie 中。

4

3 回答 3

4

在 Page_Load 中试试这个:

Response.BufferOutput = false;

还可以获取Fiddler的副本并观察您的 HTTP 对话,以确保您的页面没有被缓存。

于 2008-12-23T05:33:34.297 回答
1

当您访问公共站点时,我花了 2 美分,您正在通过网络代理运行,这就是内容被缓存的地方。

于 2011-10-31T07:20:37.357 回答
0

您还可以以编程方式指示浏览器放弃所选页面的缓存(尽管实际上由浏览器决定是否遵守您的指令)。

Public Sub KillCache()
    Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache)
    Response.Cache.SetExpires(New Date(1900, 1, 1))
    Response.Cache.SetMaxAge(New TimeSpan(0, 0, 5))   '// 5 SECONDS'
    Response.Cache.SetNoServerCaching()
    Response.Cache.SetNoStore()
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches)
End Sub
于 2009-10-14T01:28:07.477 回答