我想知道是否有人遇到过同样的问题:服务器发送的 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())
%>
我尝试了很多方法来解决这个问题:
这些都没有帮助。
谁能找出这个问题的原因和解决方案吗?
我自己找到了一个解决方案,实际上已经存在于 stackoverflow 的数据库中,但是系统没有向我建议该解决方案,因为在我写这个问题/帖子时,系统没有建议我作为潜在的已经找到的解决方案(所以,有一些东西需要完善和在系统中进行了调整,为解决方案创建了建议)。无论如何,这里是解决方案的直接链接:https://stackoverflow.com/a/49536412/7625979。
解决方案基本上很简单:SSE 响应正文要求在响应末尾添加 2 个新行符号,以便能够将不同的响应(发送)彼此分开。
因此这解决了问题:
Response.Write("数据:服务器时间是:" & now()) & chr(13) & chr(10) & chr(13) & chr(10)