【问题标题】:spring websocket status:400 websocket connect keep-alivespring websocket status:400 websocket connect keep-alive
【发布时间】:2015-01-13 15:01:40
【问题描述】:

我在连接到 spring websocket 实现时遇到问题。

调试代码后,我发现请求标头'Connection'有两个值,来自我的简单javascript代码的'keep-alive'和'Upgrade'。

请求的提琴手输出是:-

GET http://localhost:8282/play/stream HTTP/1.1
Host: localhost:8282
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Authorization: Basic bXNhZG1pbjptc2FkbWlu
Upgrade: websocket
Connection: Upgrade
Origin: http://localhost:8282
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: JSESSIONID=8C8748DD08104EAD51296E4A9E846604
Sec-WebSocket-Key: 9edBIn/q4i5pyQOFf72SMA==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

...DefaultHandshakeHandler 调用 HttpHeaders.getConnection(),它返回 FIRST 值为“keep-alive”。这与“升级”和“升级”相比,失败了。

这里有什么问题?这种情况下是否允许keep-alive header,如果允许,逻辑不正确吗?

我正在使用 spring-websockets/spring-web 4.0.8.RELEASE

干杯

【问题讨论】:

    标签: spring websocket keep-alive bad-request


    【解决方案1】:

    该请求在技术上是正确的,因为 HTTP 1.1 接受具有相同字段名称的多个字段(RFC2616 第 4.2 节)。但是,HttpHeaders 只会采用第一个值,这就是原因。删除第一个 Connection 标头或 对它们重新排序,以便选择 Connection: Upgrade

    【讨论】:

    • 感谢您的澄清!这一定是 spring-websockets 中的一个错误,因为它不期望 keep-alive 标头并且只采用第一个值。
    猜你喜欢
    • 2019-05-25
    • 2017-08-12
    • 2013-07-10
    • 2018-05-26
    • 1970-01-01
    • 2018-01-22
    • 2016-09-07
    • 1970-01-01
    • 2015-08-30
    相关资源
    最近更新 更多