Skip to content

Commit 76994d1

Browse files
authored
Remove default charset from 'application/json' Content-Type header (#2568)
Fixes #2567
1 parent f12fdb0 commit 76994d1

File tree

4 files changed

+15
-10
lines changed

4 files changed

+15
-10
lines changed

context.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ func (c *context) jsonPBlob(code int, callback string, i interface{}) (err error
489489
}
490490

491491
func (c *context) json(code int, i interface{}, indent string) error {
492-
c.writeContentType(MIMEApplicationJSONCharsetUTF8)
492+
c.writeContentType(MIMEApplicationJSON)
493493
c.response.Status = code
494494
return c.echo.JSONSerializer.Serialize(c, i, indent)
495495
}
@@ -507,7 +507,7 @@ func (c *context) JSONPretty(code int, i interface{}, indent string) (err error)
507507
}
508508

509509
func (c *context) JSONBlob(code int, b []byte) (err error) {
510-
return c.Blob(code, MIMEApplicationJSONCharsetUTF8, b)
510+
return c.Blob(code, MIMEApplicationJSON, b)
511511
}
512512

513513
func (c *context) JSONP(code int, callback string, i interface{}) (err error) {

context_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ func TestContextJSON(t *testing.T) {
154154
err := c.JSON(http.StatusOK, user{1, "Jon Snow"})
155155
if assert.NoError(t, err) {
156156
assert.Equal(t, http.StatusOK, rec.Code)
157-
assert.Equal(t, MIMEApplicationJSONCharsetUTF8, rec.Header().Get(HeaderContentType))
157+
assert.Equal(t, MIMEApplicationJSON, rec.Header().Get(HeaderContentType))
158158
assert.Equal(t, userJSON+"\n", rec.Body.String())
159159
}
160160
}
@@ -178,7 +178,7 @@ func TestContextJSONPrettyURL(t *testing.T) {
178178
err := c.JSON(http.StatusOK, user{1, "Jon Snow"})
179179
if assert.NoError(t, err) {
180180
assert.Equal(t, http.StatusOK, rec.Code)
181-
assert.Equal(t, MIMEApplicationJSONCharsetUTF8, rec.Header().Get(HeaderContentType))
181+
assert.Equal(t, MIMEApplicationJSON, rec.Header().Get(HeaderContentType))
182182
assert.Equal(t, userJSONPretty+"\n", rec.Body.String())
183183
}
184184
}
@@ -192,7 +192,7 @@ func TestContextJSONPretty(t *testing.T) {
192192
err := c.JSONPretty(http.StatusOK, user{1, "Jon Snow"}, " ")
193193
if assert.NoError(t, err) {
194194
assert.Equal(t, http.StatusOK, rec.Code)
195-
assert.Equal(t, MIMEApplicationJSONCharsetUTF8, rec.Header().Get(HeaderContentType))
195+
assert.Equal(t, MIMEApplicationJSON, rec.Header().Get(HeaderContentType))
196196
assert.Equal(t, userJSONPretty+"\n", rec.Body.String())
197197
}
198198
}
@@ -213,7 +213,7 @@ func TestContextJSONWithEmptyIntent(t *testing.T) {
213213
err := c.json(http.StatusOK, user{1, "Jon Snow"}, emptyIndent)
214214
if assert.NoError(t, err) {
215215
assert.Equal(t, http.StatusOK, rec.Code)
216-
assert.Equal(t, MIMEApplicationJSONCharsetUTF8, rec.Header().Get(HeaderContentType))
216+
assert.Equal(t, MIMEApplicationJSON, rec.Header().Get(HeaderContentType))
217217
assert.Equal(t, buf.String(), rec.Body.String())
218218
}
219219
}
@@ -244,7 +244,7 @@ func TestContextJSONBlob(t *testing.T) {
244244
err = c.JSONBlob(http.StatusOK, data)
245245
if assert.NoError(t, err) {
246246
assert.Equal(t, http.StatusOK, rec.Code)
247-
assert.Equal(t, MIMEApplicationJSONCharsetUTF8, rec.Header().Get(HeaderContentType))
247+
assert.Equal(t, MIMEApplicationJSON, rec.Header().Get(HeaderContentType))
248248
assert.Equal(t, userJSON, rec.Body.String())
249249
}
250250
}
@@ -533,7 +533,7 @@ func TestContext_JSON_CommitsCustomResponseCode(t *testing.T) {
533533

534534
if assert.NoError(t, err) {
535535
assert.Equal(t, http.StatusCreated, rec.Code)
536-
assert.Equal(t, MIMEApplicationJSONCharsetUTF8, rec.Header().Get(HeaderContentType))
536+
assert.Equal(t, MIMEApplicationJSON, rec.Header().Get(HeaderContentType))
537537
assert.Equal(t, userJSON+"\n", rec.Body.String())
538538
}
539539
}

echo.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,12 @@ const (
169169

170170
// MIME types
171171
const (
172-
MIMEApplicationJSON = "application/json"
172+
// MIMEApplicationJSON JavaScript Object Notation (JSON) https://www.rfc-editor.org/rfc/rfc8259
173+
MIMEApplicationJSON = "application/json"
174+
// Deprecated: Please use MIMEApplicationJSON instead. JSON should be encoded using UTF-8 by default.
175+
// No "charset" parameter is defined for this registration.
176+
// Adding one really has no effect on compliant recipients.
177+
// See RFC 8259, section 8.1. https://datatracker.ietf.org/doc/html/rfc8259#section-8.1
173178
MIMEApplicationJSONCharsetUTF8 = MIMEApplicationJSON + "; " + charsetUTF8
174179
MIMEApplicationJavaScript = "application/javascript"
175180
MIMEApplicationJavaScriptCharsetUTF8 = MIMEApplicationJavaScript + "; " + charsetUTF8

middleware/decompress_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ func TestDecompressSkipper(t *testing.T) {
131131
rec := httptest.NewRecorder()
132132
c := e.NewContext(req, rec)
133133
e.ServeHTTP(rec, req)
134-
assert.Equal(t, rec.Header().Get(echo.HeaderContentType), echo.MIMEApplicationJSONCharsetUTF8)
134+
assert.Equal(t, rec.Header().Get(echo.HeaderContentType), echo.MIMEApplicationJSON)
135135
reqBody, err := io.ReadAll(c.Request().Body)
136136
assert.NoError(t, err)
137137
assert.Equal(t, body, string(reqBody))

0 commit comments

Comments
 (0)