golang - websocket - AcceptKey计算

源码

https://github.com/gorilla/websocket/blob/23059f29570f0e13fca80ef6aea0f04c11daaa4d/util.go

var keyGUID = []byte("258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
func computeAcceptKey(challengeKey string) string {
h := sha1.New()
h.Write([]byte(challengeKey))
h.Write(keyGUID)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}

客户端把http upgrade到 websocket的时候,header里要带上 一个 key

Sec-WebSocket-Key: FrT1cb7Q4BxAA9vQc6OPNw==

server端需要计算一下这个key并返回一个header,让客户端能够确认,
Sec-WebSocket-Accept: siI2yOi1wUbjAf8w5YXFHOoLcoU=

计算

key + 常量258EAFA5-E914-47DA-95CA-C5AB0DC85B11 然后sha1 后再base64