From f369b02520df2720daad1f58a2470e749434db18 Mon Sep 17 00:00:00 2001 From: sada-sigsci Date: Mon, 2 Mar 2020 17:35:00 -0800 Subject: [PATCH] Remove MIME type param from content-type header SseEmitter is adding header "Content-type:text/event-stream;charset=UTF-8". Golang revproxy is expecting header "Content-Type: text/event-stream" for immediately flushing the event stream. HTML standard says [ https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model ] ignore the MIME type param and the data is always expected in utf-8. --- .../web/servlet/mvc/method/annotation/SseEmitter.java | 5 +---- .../ResponseBodyEmitterReturnValueHandlerTests.java | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java index de636f2ad851..6cc638de0d5e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java @@ -41,9 +41,6 @@ public class SseEmitter extends ResponseBodyEmitter { static final MediaType TEXT_PLAIN = new MediaType("text", "plain", StandardCharsets.UTF_8); - static final MediaType TEXT_EVENTSTREAM = new MediaType("text", "event-stream", StandardCharsets.UTF_8); - - /** * Create a new SseEmitter instance. */ @@ -70,7 +67,7 @@ protected void extendResponse(ServerHttpResponse outputMessage) { HttpHeaders headers = outputMessage.getHeaders(); if (headers.getContentType() == null) { - headers.setContentType(TEXT_EVENTSTREAM); + headers.setContentType(MediaType.TEXT_EVENT_STREAM); } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java index 36bb1cada870..8fff8455e291 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java @@ -211,7 +211,7 @@ public void sseEmitter() throws Exception { emitter.send(SseEmitter.event(). comment("a test").name("update").id("1").reconnectTime(5000L).data(bean1).data(bean2)); - assertThat(this.response.getContentType()).isEqualTo("text/event-stream;charset=UTF-8"); + assertThat(this.response.getContentType()).isEqualTo("text/event-stream"); assertThat(this.response.getContentAsString()).isEqualTo((":a test\n" + "event:update\n" + "id:1\n" + @@ -238,7 +238,7 @@ public void responseBodyFlux() throws Exception { processor.onNext("baz"); processor.onComplete(); - assertThat(this.response.getContentType()).isEqualTo("text/event-stream;charset=UTF-8"); + assertThat(this.response.getContentType()).isEqualTo("text/event-stream"); assertThat(this.response.getContentAsString()).isEqualTo("data:foo\n\ndata:bar\n\ndata:baz\n\n"); } @@ -272,7 +272,7 @@ public void responseEntitySse() throws Exception { assertThat(this.request.isAsyncStarted()).isTrue(); assertThat(this.response.getStatus()).isEqualTo(200); - assertThat(this.response.getContentType()).isEqualTo("text/event-stream;charset=UTF-8"); + assertThat(this.response.getContentType()).isEqualTo("text/event-stream"); assertThat(this.response.getHeader("foo")).isEqualTo("bar"); }