Server-Sent Events Apache AH00690: no acceptable variant: /usr/share/apache2/error/HTTP_INTERNAL_SERVER_ERROR.html.var

114
16 января 2020, 17:10

Пытаюсь реализовать SSE на стеке Apache+PHP(FastCGI). Apache 2.4.39, PHP 7.3.4, Firefox 66.0.2 (всё свежайшее на данный момент).

Проблема в том, что после ухода пользователя со страницы с установленным SSE (переход на другую ссылку на сайте), в логе апача возникает каждый раз ошибка вызова 500-ой ошибки: AH00690: no acceptable variant: /usr/share/apache2/error/HTTP_INTERNAL_SERVER_ERROR.html.var

Даже при window.addEventListener('beforeunload',function(){sse.close();});!

То есть SSE не успевает корректно закрыться.

Код сервера (PHP)

header('Content-Type: text/event-stream');
while($_SERVER['REQUEST_TIME'] >= time()-120)
{
    echo 'data:',date('H:i:s',time()),"\n\n";
    if(ob_get_contents())
        ob_end_flush();
    flush();
    sleep(1);
}
die;

Код клиента (JS)

<output id="time"></output>
<script>
<!--
    'use strict';
    function sseOpen()
    {
        console.log('SSE запущено!');
        let sse = new EventSource('/ru/sse');
        sse.onmessage = function(e)
        {
            document.getElementById('time').value=e.data;
        };
        window.addEventListener('beforeunload',function()
        {
            sse.close();
        });
        sse.onerror = function(e)
        {
            sse.close();
            console.log('SSE закрыто!');
            sseOpen();
        };
    }
    sseOpen();
//-->
</script>

while($_SERVER['REQUEST_TIME'] >= time()-120) Я использую чтобы ограничить время жизни скрипта, так без этого будут ещё больше ошибок говорящих о том, что время жизни скрипта истекло.

die в конце ни на что не влияет, он на всякий случай.

Если не возобновлять соединение (за комментировать запуск при ошибке), и подождать несколько секунд после остановки времени и перейти на другую страницу - ошибки не происходит. Во всех других случаях при обновлении страницы или переходе на другую в лог апача записывается эта ошибка.

Каким образом мне корректно обработать переход пользователя на другую страницу, чтобы это не вызывало ошибки в логе?

Почему вызывается 500-ая ошибка на апаче и почему происходит ошибка вызова 500-ой ошибки на апаче?

READ ALSO
Передача функции в onClick.React

Передача функции в onClick.React

Почему если я заполняю мэпом, то онклик не работает?Ниже он работает и переходит на следующий шаг

122
Поддержка angular7 в ie9

Поддержка angular7 в ie9

Необходимо обеспечить поддержку angular7 в ie9По найденным советам уже подключил всевозможные полифиллы

140
D3 не работает в internet Explorer 11

D3 не работает в internet Explorer 11

Вот подключение D3 версии 57

135
Помогите с запросом в базу

Помогите с запросом в базу

Вообщем надо чтобы давало всем параметры юзерам которые есть в определённом кланеНо у меня получается только для 1 юзера

150