最近我发现了一种码头现象。在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标题中的重复字符集?
答案 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)
看起来像个错误。
下的RT / Jetty问题跟踪器中提交