无法识别客户端 http 标头何时完成
Posted
技术标签:
【中文标题】无法识别客户端 http 标头何时完成【英文标题】:Can't recognize when the client http headers are finished 【发布时间】:2012-08-04 21:26:48 【问题描述】:我用ServerSocket.accept()
等待客户,然后像这样处理:
val in = new BufferedReader(new InputStreamReader(socket.getInputStream()))
var line = in.readLine()
while (line != null)
//...
line = in.readLine()
我如何知道客户端发送完标头以便发送响应?
我的意思是这些标题:
GET /mychat HTTP/1.1 主机:server.example.com 升级:websocket 连接:升级 Sec-WebSocket-Key:x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol:聊天 Sec-WebSocket-版本:13 来源:http://example.com
如所述:http://en.wikipedia.org/wiki/WebSocket
我试过了:
if (line.contains("\r\n"))
println("1")
if (line.contains("\r"))
println("2")
if (line.contains("\n"))
println("3")
但它不起作用......
有效的是line.isEmpty()
。但这很奇怪,因为流应该包含一些东西并且所有的包含都返回 false...
【问题讨论】:
【参考方案1】:readLine
从它读取的每一行的末尾删除\r\n
,因此空行只是""
,没有任何\r
或\n
字符。
【讨论】:
【参考方案2】:websocket 握手只是一个 http 请求。因此,您应该能够通过回车符/换行符 (\r\n) 判断标题何时结束。
您使用的是什么客户端?也许客户有问题?
您知道您不需要自己构建 websockets 库。有许多开源替代品,例如 netty 的一部分。
【讨论】:
我更改了标题以使问题更笼统(http 标头),谢谢。以上是关于无法识别客户端 http 标头何时完成的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Rails 无法识别请求标头中的 `Accept: application/json`?