В локальных системах разработки таких ошибок не возникало, но при развертывании на работающем производственном сервере я получаю следующие ошибки.
Ответ EventSource имеет тип MIME ("text / html"), который не является "text / event-stream". Прерывание соединения.
Я использую Laravel. Я установил заголовки в функции контроллера следующим образом.
Я обнаружил, что многие люди сталкиваются с одними и теми же проблемами в разных фреймворках, но не могут найти рабочее решение для меня.
Может ли кто-нибудь иметь решение или предложение по этому поводу? Заранее спасибо.
Ниже приведен JavaScript-вызов SSE.
<script>
if(typeof(EventSource) !== "undefined"){
var source = new EventSource("/sse");
source.addEventListener("response", function(event) {
document.getElementById("result").innerHTML += "<p>RESPONSE DATA</p><p>" + event.data + "</p>";
});
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events.";
}
Ниже приводится функция контроллера Laravel. Я также попытался установить заголовки в public function __construct () {} , а также попытался установить в public function index () {} Это тоже не помогло.
public function sse($userid,Request $request){
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$SERVER = env('SERVER','');
$url = $SERVER.'/stream';
$user = Auth::user();
$gwuser = $user->gwuser;
$gwpass = $user->gwpass;
ini_set('output_buffering', 'off');
ini_set('zlib.output_compression',false);
ini_set('implicit_flush',true);
while (@ob_end_flush()){
ob_implicit_flush(true);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERPWD, $gwuser . ':' . $gwpass);
$error = 0;
//$result = curl_exec($ch);
//This while loop is only for server timeout after 5 minutes
while(true){
$result = curl_exec($ch);
}
}
}
Я также пытался использовать Middleware для установки заголовков для выбранного маршрута и вызова связующего ПО для этого маршрута. Это не помогло.
namespace App\Http\Middleware;
use Closure;
class setHeader
{
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('Content-Type', 'text/event-stream');
$response->header('Cache-Control', 'no-cache');
return $response;
}
}