在本地开发系统中,没有出现任何此类错误,但是在实时生产服务器中进行部署时,却出现了以下错误。
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;
}
}