Ws在进行协议升级的时候,获取不到完整的头部信息

问题描述

我本地启动了tcp服务,使用浏览器发起websocket连接的时候,浏览器请求的头部信息是完整的,但是在我服务器里面拿到的头部缺了一些,请求头的数据是从:
gopath路径\src\crypto\tls\conn.go文件中的Conn结构体c.rawInput.Bytes()读取出来的,而且只有这个ws站点请求有问题,会是什么原因呢?

  • 浏览器请求头
    Request URL:ws://81.68.666.777:11447/messages
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Cache-Control: no-cache
    Connection: Upgrade
    Host: 81.68.666.777:11447
    Origin: http://81.68.666.777:11445
    Pragma: no-cache
    Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
    Sec-WebSocket-Key: WigVL7z8DYQ7m84aSyrTvg==
    Sec-WebSocket-Protocol: v12.stomp
    Sec-WebSocket-Version: 13
    Upgrade: websocket
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0
  • 服务器接收的数据
    GET /messages HTTP/1.1
    Host: 81.68.666.777:11447
    Connection: Upgrade
    Pragma: no-cache
    Cache-Control: no-cache
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0
    Upgrade: websocket
    Origin: http://81.68.666.777:11445
    Sec-WebSocket-Version: 13
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Cookie: gpcaptchaid=0a011e13-b36f-49ef-2a35-19ead1dbed2e; 8d15e6100f54bd937e6edd24b5ca0fb7=904882929734c7885d881e

在Upgrade的时候报错:websocket: not a websocket handshake: ‘Sec-WebSocket-Key’ header is missing or blank

失色天空
讨论数量: 4
1周前 评论
失色天空 (楼主) 1周前

结贴:问题的原因是go标准库读取不完整导致的,如果我自己手动读取,是可以读完整的。

1周前 评论

websocket: not a websocket handshake: ‘Sec-WebSocket-Key’ header is missing or blank 这里已经提示没有这个请求头,想要定位只需要wireshark 抓包一下就知道了。 要不用workerman 监听websocket 端口,打印下http 协议包就知道整个是什么样子。

5天前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!