Я создал приложение, которое в какой-то момент использует отправленные сервером события, отправляемые из давно работающего 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');
Казалось, на компьютерах, которые я использую, все работало отлично, но когда я тестировал приложение на ноутбуке моей сестры, я заметил это странное поведение с Firefox и Chrome. После получения первых двух сообщений они разрывают соединение. Firefox пытается повторно подключиться, а Chrome выдает ошибку:
Ответ EventSource имеет тип MIME («текст/html»), который не является "text/event-stream"
Версии браузеров абсолютно одинаковые (39.0 и 43.0.2357.134m соответственно) во всех ПК. Ноутбук моей сестры работает под управлением Windows 7 Home Premium SP1.
Как можно объяснить такое разное поведение? Зависит ли это от настроек браузера или это может быть связано с какими-то общесистемными настройками? IE 10 на ноутбуке моей сестры не представляет проблемы.
Подробнее здесь:
https://stackoverflow.com/questions/314 ... ext-html-b