我们使用的是tomcat版本:8.0.33并尝试迁移到8.5.13
我们在应用程序中使用了cookie。但在上述版本中部署应用程序后,在回读cookie时遇到了错误,
2017-04-11 16:13:04错误错误:176 - 课堂上发生异常 com.TestController的异常细节是: java.lang.IllegalArgumentException:一个无效的字符[34] 存在于Cookie值中 org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateCookieValue(Rfc6265CookieProcessor.java:182) 在 org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:115)
后来找到了解决问题的方法:
// Previous code:
final Cookie cookies = new Cookie(key, value);
//Fix code:
final Cookie cookies = new Cookie(key, URLEncoder.encode(value, "UTF-8"));
我们必须对cookie中的值进行编码。
答案 0 :(得分:1)
ASCII字符34(%x22)是双引号(")。
引用RFC 6265的相关部分:
cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
; US-ASCII characters excluding CTLs,
; whitespace DQUOTE, comma, semicolon,
; and backslash
token = <token, defined in [RFC2616], Section 2.2>
从上面可以看出,%x22不是有效的cookie-octet。 Tomcat将允许您添加可选的开始和结束双引号,但在其他地方使用双引号将触发您看到的错误。