无法识别客户端 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 标头何时完成的主要内容,如果未能解决你的问题,请参考以下文章

尽管在标头中发送了 base64,但附件无法识别

为啥 Rails 无法识别请求标头中的 `Accept: application/json`?

“游戏中心无法识别此游戏”错误

图像标头无法识别。 (WindowsES 8应用程序中的HRESULT异常:0x88982F61)

无法通过UFT正确识别SAP对象

简易自动完成无法识别