服务器发送事件(SSE)在IIS上的经典ASP中不起作用[重复]

2skhul33  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(259)

此问题已在此处有答案

Server Sent Event and asp classic(2个答案)
上个月关门了。
我想知道是否有人遇到过同样的问题:Server sent eventd(SSE)在IIS(版本10)上的Classic Asp中不像以前那样工作。似乎这个问题已经出现在现代浏览器中,因为在我的一个旧的IDE中,旧的浏览器(即crome)集成为仍然显示SSE的一部分。奇怪的是,我在服务器端或浏览器的控制台中没有任何错误,并且3种不同的测试浏览器(Edge,Chrome和Firefox)的行为相同:无论服务器是否成功响应(HTTP状态200),浏览器屏幕上都不会呈现任何内容。在浏览器的网络选项卡中,我无法弄清楚为什么来自后端的文本/流内容没有呈现(在屏幕上,而不是通过console.log在控制台中)。同样奇怪的是,从IIS后端发送确实发生了,因为在网络选项卡中定期列出新的响应(来自SSE.asp),状态为200代码,但没有涉及流数据,数据在控制台中呈现或记录:

  • 下面是我最简单的演示代码。*
    SSE.html
<!DOCTYPE html>
<html>
<head>
<script>

    if(typeof(EventSource) !== "undefined") {
        var source = new EventSource("SSE.asp");
        source.onmessage = function(event) {
               console.log(event.data)
                   document.getElementById("result").innerHTML += event.data + "<br>";
        };
        } else {
        document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
    }
</script>
</head>
<body>
    <h1>Getting server updates</h1>
    <div id="result"></div>
</body>
</html>

SSE.asp

<%
Response.Charset = "utf-8"

Response.ContentType = "text/event-stream"
Response.Expires = -1
       
Response.Write("data: The server time is: " & now())
%>

我尝试了很多方法来解决这个问题:

  • 禁用浏览器缓存
  • 禁用PC中的防火墙
  • 缓存禁用服务器端
  • 甚至在远程IIS服务器(共享托管环境)中也尝试过

这些都没有帮助。
有没有人能找出这个问题的原因和解决方案?

k2fxgqgv

k2fxgqgv1#

我找到了一个解决方案,实际上已经在stackoverflow的数据库中了,但是在我写这个问题/帖子的时候,系统并没有向我建议作为潜在的已经找到的解决方案(所以,在系统中有一些东西需要改进和调整,为解决方案提供建议)。无论如何,这里是解决方案的直接链接:https://stackoverflow.com/a/49536412/7625979
解决办法很简单:SSE响应主体要求在响应的末尾添加2个新的线符号,以便能够将不同的响应(发送)彼此分开。
因此,这解决了问题:
响应。写入(“数据:服务器时间为:“& now())& chr(13)& chr(10)& chr(13)& chr(10)
有关发送格式文档,请参阅以下内容:https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format

相关问题