文本/事件流与应用程序/流之间的区别是什么

2022-04-06 00:00:00 java spring-webflux project-reactor
@GetMapping(path = "/cars", produces = "text/event-stream")
public Flux<Car> getCarStream() {
    System.out.println("application/stream+json");
    return this.repository.findCarsBy().log();
}

上面的代码和下面的代码有什么区别:

@GetMapping(path = "/cars", produces = "application/stream+json")
public Flux<Car> getCarStream() {
    System.out.println("application/stream+json");
    return this.repository.findCarsBy().log();
}

到目前为止,我发现了相互矛盾的信息:一些人说它们都是指服务器发送的事件,另一些人说它们是有区别的。


解决方案

tl;dr:dzone文章是错的,罗森的话是对的。

text/event-stream是服务器发送事件(SSE)的官方媒体类型;它将为数据位添加data:前缀,您也可以选择前缀来更改该数据段对客户端的含义。此媒体类型适用于浏览器,因为它们使用EventSourceJavaScript API支持该类型。

application/stream+json用于服务器到服务器/http客户端(任何不是浏览器的内容)的通信。它不会为数据添加前缀,只会使用CRLF来拆分数据片段。请注意,Spring团队正在重新考虑该媒体类型,因为SPR-16742(请不要犹豫在这里发表评论!)。

相关文章