1、網絡環境
Nginx作為前端服務器,並且為解決跨域問題對后台服務做了反向代理。
2、所有http請求都好着,Websocket后台提示“No handler found for GET”,找不到服務路徑。
3、通過全網查詢,最后解決辦法,在反向代理location中增加
location /lawAccept/ { proxy_set_header Connection 'upgrade'; proxy_set_header Upgrade $http_upgrade; proxy_pass http://localhost:8085/lawAccept/; }
4、參數解釋
訪問websocket時的鏈接通常為
socket = new WebSocket("ws:192.168.2.24:8080/oneAccept/evalwebsocket/")
此時協議信息如下
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
通過與http請求頭對比,發現多了
Upgrade: websocket
Connection: Upgrade
此種用法使用的協議為ws協議,必須借助http做第一次握手,現在前端和后端增加了nginx作為代理,則需要在nginx中將使用的ws協議讓后端知曉
proxy_set_header Connection 'upgrade'; //告訴接收端,要進行協議升級
proxy_set_header Upgrade $http_upgrade; //升級為websocket