Java 升级到Jetty 9.3后出现标头分析错误

Java 升级到Jetty 9.3后出现标头分析错误,java,http,jetty,war,Java,Http,Jetty,War,当我将jetty发行版从9.2更改为9.3时,我遇到了一个问题。在9.2下,我的应用程序可以完美地工作。但是,当运行同一war文件并从同一客户端连接时,在9.3下运行时,我会收到以下错误消息: 015-08-30 14:55:32.174:警告:oejh.HttpParser:qtp1100439041-12:缓冲区名称中的头“”状态中的非法字符0x20HeapByteBuffer@26dab36[p=62,l=654,c=8192,r=592]={POST/api/v1/time…0.1:80

当我将jetty发行版从9.2更改为9.3时,我遇到了一个问题。在9.2下,我的应用程序可以完美地工作。但是,当运行同一war文件并从同一客户端连接时,在9.3下运行时,我会收到以下错误消息:


015-08-30 14:55:32.174:警告:oejh.HttpParser:qtp1100439041-12:缓冲区名称中的头“”状态中的非法字符0x20HeapByteBuffer@26dab36[p=62,l=654,c=8192,r=592]={POST/api/v1/time…0.1:8080\r\nKey从Jetty 9.2升级到9.3意味着您进入了HTTP/1.1更新规范和RFC以及新HTTP/2需求的新世界,甚至包括对HTTP/1.1的更改以支持HTTP/2升级(h2c)

Jetty 9.2紧随RFC2616(现已被RFC7230、RFC7231、RFC7232、RFC7233、RFC7234、RFC7235淘汰,更新人:RFC2817、RFC5785、RFC6266、RFC6585)

Jetty 9.3更新了古老的RFC2616规范(从1999年开始!)。许多在过去有效的东西不再有效。我们还在Jetty 9.3中放弃了对HTTP/0.9的支持

HTTP/1.1的许多部分都经过了整理,以利用更新后的RFC,其中一些可能会对您造成影响

查看规范,您会看到标题字段声明为

 header-field   = field-name ":" OWS field-value OWS

 field-name     = token
 field-value    = *( field-content / obs-fold )
 field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
 field-vchar    = VCHAR / obs-text

 obs-fold       = CRLF 1*( SP / HTAB )
                ; obsolete line folding
                ; see Section 3.2.4
标记定义为

这意味着您的
”信息标题“
中的
(空格)根据规范无效


如果它是
“Info-Header”
或者更准确地遵循规范
“X-Info-Header”
(以避免与规范保留的头名称冲突)

那么,它在所有早期版本的HTTP中也是无效的。虽然
令牌
确实不允许
(空格),早期规范的头解析规则本质上说是寻找第一个
(冒号)和冒号之前的内容是标记,自相矛盾。谢天谢地,这些矛盾多年来随着规范的更新(缓慢地)得到了纠正。以下是“早期规范的头解析规则”?请用指针。是否有办法允许此通信,因为在客户端进行更改会破坏向后兼容性?@VishalT规范中的更改是为了删除/消除/防止先前规范的松散行为所导致的安全问题。您对向后兼容性的需求将使您对安全性的需求更加强烈。
tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." /
        "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA
token = 1*tchar