SSE Laravel:EventSource的响应的MIME类型(“ text / html”)不是“ text / event-stream”。中止连接

时间:2019-04-08 12:09:55

标签: laravel server-sent-events

在本地开发系统中,没有出现任何此类错误,但是在实时生产服务器中进行部署时,却出现了以下错误。

EventSource的响应的MIME类型(“ text / html”)不是“ text / event-stream”。中止连接。

我正在使用laravel。我在控制器函数中设置了标头,如下所示。 我发现许多人在不同的framworks中遇到相同的问题,但是找不到适合我的解决方案。

有人可以对此提出解决方案或建议吗?提前致谢。

以下为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控制器功能。我还尝试在公共功能__construct(){} 中设置标头,还尝试在公共功能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);
        }


    }

}

我也尝试过使用中间件为选定的路由调用设置标头,并将中间件分配给该路由。那没有帮助。

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;

}

}

0 个答案:

没有答案