Php 服务器发送事件-chrome和firefox将文本/事件流局部错误解释为文本/html

Php 服务器发送事件-chrome和firefox将文本/事件流局部错误解释为文本/html,php,google-chrome,firefox,server-sent-events,event-stream,Php,Google Chrome,Firefox,Server Sent Events,Event Stream,我已经构建了一个应用程序,在某个时候,它使用服务器发送的事件(从长时间运行的php脚本发送)来更新前端的进度条。在我遇到了刷新php脚本输出的典型问题并尝试了我在SO上读到的所有可能的解决方案之后,我得出结论,使其工作的唯一方法是通过回显长字符串来强制输出。将消息发送到浏览器的功能如下: function sendMsg($id, $array) { echo "id: $id" . PHP_EOL; echo "data: ".json_enco

我已经构建了一个应用程序,在某个时候,它使用服务器发送的事件(从长时间运行的php脚本发送)来更新前端的进度条。在我遇到了刷新php脚本输出的典型问题并尝试了我在SO上读到的所有可能的解决方案之后,我得出结论,使其工作的唯一方法是通过回显长字符串来强制输出。将消息发送到浏览器的功能如下:

function sendMsg($id, $array) {
            echo "id: $id" . PHP_EOL;
            echo "data: ".json_encode($array).PHP_EOL;
            echo PHP_EOL;
            flush();
            ob_flush();
            echo str_repeat(' ', 4096);
}
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
脚本的标题如下所示:

function sendMsg($id, $array) {
            echo "id: $id" . PHP_EOL;
            echo "data: ".json_encode($array).PHP_EOL;
            echo PHP_EOL;
            flush();
            ob_flush();
            echo str_repeat(' ', 4096);
}
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
在我使用的个人电脑上,一切似乎都很好,但当我在姐姐的笔记本电脑上测试该应用程序时,我注意到Firefox和Chrome出现了这种奇怪的行为。在收到前两条消息后,他们会断开连接。Firefox尝试重新连接,Chrome抛出一个错误,显示:

EventSource响应的MIME类型(“文本/html”)不是“文本/事件流”

所有PC上的浏览器版本都完全相同(分别为39.0和43.0.2357.134m)。我姐姐的笔记本电脑运行Windows 7 Home Premium SP1

如何解释这种不同的行为?它是否取决于浏览器的设置,或者可能归因于某些系统范围的设置?我妹妹笔记本电脑上的IE 10没有问题

事件流是一个简单的文本数据流,必须对其进行编码 使用
UTF-8

资料来源:

这应该可以在Chrome和Firefox中使用

header('Content-Type: text/event-stream; charset=utf-8');

这两行的顺序相反:

flush(); 


有没有办法在服务器上进行调试或在日志中查找更多信息,以尝试确定服务器是否正在断开连接?我不知道如何做到这一点,但我猜该连接是在客户端断开的,因为它在我尝试过的所有其他系统中都有效。顺便说一句,由于其他原因,我不得不格式化我姐姐的笔记本电脑,现在我没有任何方法进行实验。有了新的操作系统(win 10),它工作得很好。