此问题已在此处有答案:
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服务器(共享托管环境)中也尝试过
这些都没有帮助。
有没有人能找出这个问题的原因和解决方案?
1条答案
按热度按时间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