websocket + 代理請求失敗,返回400

來源:互聯網
上載者:User

標籤:開發   shu   close   解決   sock   html   業務   efault   解決方案   

情境

商務服務提供了 websocket 服務,基於 websocket 來實現報表資料的推送,客戶在瀏覽器上查看報表,經過 http 代理將請求傳遞給後端服務。

問題

客戶在瀏覽器上查看報表資料時,報表功能異常,瀏覽器開發工具查看到 websocket 握手在服務端拒絕掉,返回 400 bad request。

分析

400 一般是由於用戶端,所以應該是用戶端請求參數或者路出現問題。通過對比正常和異常的websocket 請求報文,得到,異常的報文缺少了 Upgrade:websocket 的 http 頭部。
Upgrade 屬於 hop-to-hop 類型的 http cache ,與 end-to-end 不同,後者在兩個用戶端請求至最終後端服務時都不會變,如 User-Agent,而前者則會在經過代理時被處理掉,需要 proxy 的能力再將這類 hop-to-hop header 處理下。

解決方案

nginx 有如下解決方案,在 http 要求標頭裡把 Upgrade 補上去,前提是在代理到後端之前的報文有 Upgrade。

map $http_upgrade $connection_upgrade {default upgrade;'' close;}proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;
參考

關於Nginx+websocket 400問題 https://www.jianshu.com/p/d5b136a27bdf
End-to-end and Hop-by-hop Headers https://tools.ietf.org/html/rfc2616#section-13.5.1

websocket + 代理請求失敗,返回400

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.