开发者社区> 问答> 正文

netty 和ios通信 的问题? 400 报错

netty 和ios通信 的问题? 400 报错

我这边是java netty服务端,需要向苹果手机推送信息,谁知道苹果手机如何通过websocket来连上netty呢?

按照网上的说法:

WebSocket不同版本的三种握手方式

我用苹果手机来测试,他们所发的请求是这样的:

GET /demo HTTP/1.1 
Host: example.com 
Connection: Upgrade 
Sec-WebSocket-Key2: 12998 5 Y3 1  .P00 
Sec-WebSocket-Protocol: sample 
Upgrade: WebSocket 
Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5 
Origin: http://example.com 
^n:ds[4U 

也就是带有key的请求,我响应的数据,也应该带有key,可是,我响应的总是

HTTP/1.1 101 Web Socket Protocol Handshake 
Upgrade: WebSocket 
Connection: Upgrade 
WebSocket-Origin: http://www.xx.com 
WebSocket-Location: ws://www.xx.com/ls

里面没有Sec-WebSocket-Key,因此netty服务端和苹果手机建立不了连接,请求了解的人指点下哦,谢谢。

 

 

展开
收起
爱吃鱼的程序员 2020-05-30 22:35:01 674 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    应该是这样的把 你少了一行

    GET /demo HTTP/1.1
            Host: example.com
            Connection: Upgrade
            Sec-WebSocket-Key2: 12998 5 Y3 1  .P00
            Sec-WebSocket-Protocol: sample
            Upgrade: WebSocket
            Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5
            Origin: http://example.com
    
            ^n:ds[4U
    
    
    
            HTTP/1.1 101 WebSocket Protocol Handshake
            Upgrade: WebSocket
            Connection: Upgrade
            Sec-WebSocket-Origin: http://example.com
            Sec-WebSocket-Location: ws://example.com/demo
            Sec-WebSocket-Protocol: sample
    
            8jKS'y:G*Co,Wxa-



    ######

    苹果手机那边用的是draft-ietf-hybi-thewebsocketprotocol-00

    最好建议他们改用rfc6455

    ######

    引用来自“char1st”的评论

    应该是这样的把 你少了一行

    GET /demo HTTP/1.1
            Host: example.com
            Connection: Upgrade
            Sec-WebSocket-Key2: 12998 5 Y3 1  .P00
            Sec-WebSocket-Protocol: sample
            Upgrade: WebSocket
            Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5
            Origin: http://example.com
    
            ^n:ds[4U
    
    
    
            HTTP/1.1 101 WebSocket Protocol Handshake
            Upgrade: WebSocket
            Connection: Upgrade
            Sec-WebSocket-Origin: http://example.com
            Sec-WebSocket-Location: ws://example.com/demo
            Sec-WebSocket-Protocol: sample
    
            8jKS'y:G*Co,Wxa-



    我缺少少了一行

     8jKS'y:G*Co,Wxa-

    才导致无法建立连接,我不知道怎么补上这一行呢,因为其实现代码我是直接用的netty 官方案例的(io\netty\example\http\websocketx\server),不知道为什么会这样

    ######

    你直接用netty/example/http/websocketx/client例子看能不能访问netty的server。记得在pipeline里面最前面加LoggingHandler(LogLevel.INFO)。还有把clinet 里面的WebSocketVersion换成V00试下.


    2020-05-30 22:35:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
From Java/Android to Swift iOS 立即下载
深入剖析iOS性能优化 立即下载