Server-Sent Events (SSE) 是 HTML5 新增的一项用于浏览器与服务器之间实现推送通信的技术。它可以允许服务器向客户端推送事件,而无需为每个事件建立一个新的 HTTP 连接。在 SSE 中,服务端会周期性地向客户端发送数据。在这个过程中,需要注意 Content-Type 和 charset 的设置问题。
Content-Type
在发送 SSE 消息时,设置正确的 Content-Type 非常重要。Content-Type 是用于指定被发送数据的 MIME 类型的一个标记。MIME 类型是一种用于描述一种类型信息的字符串,这个字符串可以用于应用程序之间的传递和共享信息。
对于 SSE,Content-Type 应该设置为 text/event-stream
。这个值同样需要设置 charset,以确保正确的字符编码。下面是一个设置 Content-Type 的示例代码:
res.setHeader('Content-Type', 'text/event-stream; charset=utf-8');
charset
SSE 中使用的字符编码应该是 UTF-8,因为它是最常见的字符编码,同时也是目前互联网的标准字符集。如果不设置 charset,那么在某些浏览器中会导致乱码的问题。
在设置 charset 时,需要注意服务端编码的问题。如果服务端编码不是 UTF-8,那么在发送数据之前需要对数据进行转码。下面是一个示例代码:
// 数据源编码为 GBK const data = '中文'; const iconv = require('iconv-lite'); res.write('data: ' + iconv.encode(data, 'utf-8').toString() + '\n\n');
另外,在解析 SSE 数据时,也需要注意将数据转换为正确的编码格式。下面是一个示例代码:
const source = new EventSource('http://example.com/streaming'); source.onmessage = function(event) { const data = decodeURIComponent(escape(event.data)); console.log(data); }
总结
在使用 SSE 时,Content-Type 和 charset 都是非常重要的设置。我们需要确保使用正确的 MIME 类型和字符编码,以避免在实际应用中出现问题。同时,在编写服务端和客户端代码时,也需要对数据进行正确的编码和解码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64638520968c7c53b048d03c