Websocket接続https

3569 ワード

質問:前に1対1のチャットルームを作りました(https://blog.csdn.net/jameschiang1995/article/details/102762568)の場合、websocket接続httpsに多くの問題が発生しているので、ここでwebsocket接続https:1、wsとwssの違いについてまとめると、httpとhttpsに似ており、wssはTSLプロトコルに基づくwsであることがわかります.もしあなたのウェブサイトがHTTPSプロトコルのならば、ws://を使うことができなくて、ブラウザはblockして接続を落として、HTTPSの下でHTTPの要求を許可しないのと同じように2、接続のコードを次のように変更します(httpサイトの場合)在这里插入图片描述 WebSocket connection to'wss://IPアドレス:ポート番号/websocket’failed:Error in connection establishment:net::ERR_SSL_PROTOCOL_ERROR. 接続に失敗し、プロトコルが間違っているという意味です.httpとwebsocketを具体的に分析し、以下のいくつかの問題について説明します.
a.websocket          ?
b.websocket http     ?
c.websocket    
d.apache/nginx    wss  

以下は個人的な理解のみで、間違いがあれば指摘してください.a、imのようなシステムでは、以前はajaxポーリングでメッセージを取得していましたが、サーバリソースを非常に消費していました.重要な原因は、httpプロトコルが永続的な接続ではないことです(現在、http 1.1は長い接続ではありません)、ある期間に接続サーバがtcpの3回の握手を経て、データを再要求しなければなりません.これにより、サーバリソースが非常に消費され、websocketプロトコルはhttpプロトコルに基づいており、永続的なリンクに属し、フルデュプレクスであり、websocketプロトコルの下でカスタマーサービス側とブラウザが同時に情報を送信することができる.b、websocket、httpはいずれもアプリケーション層プロトコルに属し、ネットワーク層はTCPプロトコルに基づいている.c、まずは典型的なWebsocket握手を見てみましょう
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

HTTPに詳しい子供靴が見つかったかもしれませんが、このHTTPプロトコルのような握手リクエストには、いくつかのものが追加されています.ついでに説明します.
Upgrade: websocket
Connection: Upgrade

これがWebsocketの核心です.Apache、Nginxなどのサーバーに教えてください.注意してください.私が発起したのはWebsocketプロトコルです.早く対応するアシスタントを見つけてください.あの古いHTTPではありません.
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

まず、Sec-WebSocket-KeyはBase 64 encodeの値で、これはブラウザがランダムに生成したもので、サーバーに教えます:泥炭、巣をぶらぶらしないでください、私は尼が本当にWebsocketアシスタントであるかどうかを検証します.そして、Sec_WebSocket-Protocolは、同じURLの下で異なるサービスに必要なプロトコルを区別するためにユーザー定義の文字列です.簡単な理解:今晩はAサービスをします.間違えないでください.最後に、Sec-WebSocket-Versionはサーバーに使用するWebsocket Draft(プロトコルバージョン)を教えています.最初の頃、WebsocketプロトコルはDraftの段階で、いろいろな奇抜なプロトコルがありました.そして、奇抜なものがたくさんありました.FirefoxとChromeはバージョンではありません.当初Websocketプロトコルが多すぎたのは大きな難題だった.でも今は大丈夫です.もう决めました.みんなが使っているものは脱水します.ウェイター、私がほしいのは13歳です.そしてサーバは次のものを返し、リクエストを受け入れてWebsocketを正常に確立したことを示します.
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

ここからHTTPが最后に担当するエリアです.お客様に、私はすでにプロトコルを切り替えました.
Upgrade: websocket
Connection: Upgrade

依然として固定されており、mozillasocket、lurnarsocket、shitsocketではなくWebsocketプロトコルがアップグレードされることをクライアントに伝えます.そして、Sec-WebSocket-Acceptこれはサーバによって確認され、暗号化されたSec-WebSocket-Keyです.サーバー:はい、わかりました.私のIDカードを見せて証明してください.その後、Sec-WebSocket-Protocolは最終的に使用されるプロトコルを示す.これでHTTPはすべての作業を完了し、次はWebsocketプロトコルに完全に従って行われます.d.nginx.confは以下のコードを記述する:在这里插入图片描述
location /wss{
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

参照リンク:https://www.zhihu.com/question/20215561/answer/40316953 https://www.cnblogs.com/mafly/p/websocket.html