服务器发送事件 (SSE) 在 IIS 上的经典 Asp 中不起作用

问题描述 投票:0回答:1

我想知道是否有人遇到过同样的问题:服务器发送的 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())
%>

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

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

这些都没有帮助。

谁能找出这个问题的原因和解决方案吗?

iis asp-classic server-sent-events
1个回答
0
投票

我自己找到了一个解决方案,实际上已经存在于 stackoverflow 的数据库中,但是系统没有向我建议该解决方案,因为在我写这个问题/帖子时,系统没有建议我作为潜在的已经找到的解决方案(所以,有一些东西需要完善和在系统中进行了调整,为解决方案创建了建议)。无论如何,这里是解决方案的直接链接:https://stackoverflow.com/a/49536412/7625979

解决方案基本上很简单:SSE 响应正文要求在响应末尾添加 2 个新行符号,以便能够将不同的响应(发送)彼此分开。

因此这解决了问题:

Response.Write("数据:服务器时间是:" & 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

© www.soinside.com 2019 - 2024. All rights reserved.