为什么Jetty不支持Content Type标头中的重复字符集?

时间:2015-12-24 03:14:14

标签: http http-headers jetty

最近我发现了一种码头现象。在eclipse中我安装了一个jetty插件来运行web项目。在页面(jsp)中有一个ajax请求,我发现如果项目由jetty启动有500个错误,但如果由tomcat启动,则没关系。见下文:

curl -d "category=foo" 'http://localhost:8080/foo/bar' -i
HTTP/1.1 200 OK
Date: Tue, 22 Dec 2015 13:27:35 GMT
Content-Type: text/html;charset=utf-8;charset=UTF-8
Cache-Control: no-cache
Expires: 0
Pragma: no-cache
Content-Length: 20086
Server: Jetty(8.1.14.v20131031)
curl: (18) transfer closed with 20086 bytes remaining to read
请注意上面的内容类型标题,charset是重复的,因此导致此错误。 然后我改变了设置内容类型的代码,再次请求,现在没问题。

HTTP/1.1 200 OK
Date: Thu, 24 Dec 2015 03:00:33 GMT
Content-Type: application/json;charset=UTF-8
Cache-Control: no-cache
Expires: 0
Pragma: no-cache
Content-Length: 83
Server: Jetty(8.1.14.v20131031)
{"altMessage":null,"desc":null,"map":null,"message":"[]","prop":null,"rsCode":"ok"}

所以我想知道为什么Jetty不支持Content Type标题中的重复字符集?

2 个答案:

答案 0 :(得分:1)

我在jetty-9.3上进行了快速测试,以下测试通过正常:

@Test
public void testStrangeContentType() throws Exception
{
    Response response = newResponse();

    assertEquals(null, response.getContentType());

    response.recycle();
    response.setContentType("text/html;charset=utf-8;charset=UTF-8");
    response.getWriter();
    assertEquals("text/html;charset=utf-8;charset=UTF-8",response.getContentType());
    assertEquals("utf-8",response.getCharacterEncoding().toLowerCase());
}

所以这看起来像是在最新的jetty版本中修复的。 Jetty-8已经end of life for some time所以你可以升级吗?

答案 1 :(得分:0)

看起来像个错误。

已在https://bugs.eclipse.org/485376

下的RT / Jetty问题跟踪器中提交