大家在寫websocket服務端的時候可能會碰到一個問題,我以spring-websocket爲例子,用blue-zero.com做在線測試,Firefox和chrom連接成功,但是蘋果的Safari或者用一些C++導出的工具包來連接測試確報一個服務端異常:The extension [x-webkit-deflate-frame] is not supported] with root case.
原因是舊版本的瀏覽器或者三方工具利用了比較舊的非規範擴展“x-webkit-deflate-frame”,而最新的瀏覽器發送的是websocket草案中規範的“permessage-deflate”,所以解決方法可以是:在創建連接前,更改頭部信息:
/** 在攔截器內強行修改websocket協議,將部分瀏覽器不支持的 x-webkit-deflate-frame 擴展修改成 permessage-deflate */
if(request.getHeaders().containsKey("Sec-WebSocket-Extensions")){
request.getHeaders().set("Sec-WebSocket-Extensions", "permessage-deflate");
}