websocket: クライアントが websocket プロトコルを使用していません: 「接続」ヘッダーに「アップグレード」トークンが見つかりません
WebSocket 接続を行うときに、「クライアントは WebSocket プロトコルを使用していません: 'アップグレード' トークンが '接続' ヘッダーに見つかりません」というエラーが表示されることがあります。このエラーは通常、クライアントが WebSocket プロトコルを正しく使用していないことが原因で発生します。 WebSocket は、接続を確立するための特別なハンドシェイク プロセスを使用して、クライアントとサーバー間の双方向通信を可能にするプロトコルです。ハンドシェイク中に、クライアントは WebSocket プロトコルの使用を示すために「Upgrade」ヘッダーを適切に送信する必要があります。クライアントがこのヘッダーを正しく送信しない場合、サーバーは上記のエラーを返します。 PHP エディター Baicao は、WebSocket 接続をスムーズに進めるために、この問題を解決する方法をこの記事で詳しく紹介します。
質問内容
goとJavaScriptフロントエンドで書かれたサーバーへのWebSocket接続を確立しようとしています。ディレクトリに次のファイルがあります:
main.go インデックス.html
**これは main.go
の私の go コードです: **
これは、index.html の HTML と JavaScript です:
リーリー ただし、go run main.go
を使用して実行すると、次のエラーが発生します:
ドイツ語の意味は「既存の接続はホスト ソフトウェアの制御により終了する」です
何かが欠けていますが、何が問題なのかを理解できるほど私の理解は深くありません。ご協力をよろしくお願いいたします。
私の JS WebSocket にアップグレードが欠けているのではないかと思いましたが、Chrome では、リクエスト URL ws://localhost:9100/ws の次のリクエスト ヘッダーに「upgrade:websocket」と表示されていることがわかります。
package main import ( "fmt" "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.upgrader{ readbuffersize: 1024, writebuffersize: 1024, } func homepage(w http.responsewriter, r *http.request) { http.servefile(w, r, "./index.html") conn, err := upgrader.upgrade(w, r, nil) if err != nil { log.println("error in handler:", err) return } log.println("client connected.") for { messagetype, p, err := conn.readmessage() if err != nil { log.println("fehler in readmessage: ", err) return } log.println(string(p)) //echo message to client if err := conn.writemessage(messagetype, p); err != nil { log.println(err) return } } } func setuproutes() { http.handlefunc("/ws", homepage) } func main() { fmt.println("server gestartet") setuproutes() log.fatal(http.listenandserve(":9100", nil)) }
解決策
cerise limón さんの有益なコメントのおかげで修正することができました。問題は、ファイルのインデックス作成用に 1 つのエンドポイントが必要であり、WebSocket 用にもう 1 つのエンドポイントが必要であることです。そこで、関連する部分を次のように変更しました。 リーリー
以上がwebsocket: クライアントが websocket プロトコルを使用していません: 「接続」ヘッダーに「アップグレード」トークンが見つかりませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、Goのパッケージインポートメカニズム:名前付きインポート(例:インポート "fmt")および空白のインポート(例:_" fmt")について説明しています。 名前付きインポートはパッケージのコンテンツにアクセス可能になり、空白のインポートはtのみを実行します

この記事では、Webアプリケーションでのページ間データ転送のためのBeegoのnewflash()関数について説明します。 newflash()を使用して、コントローラー間で一時的なメッセージ(成功、エラー、警告)を表示し、セッションメカニズムを活用することに焦点を当てています。 リミア

この記事では、MySQLクエリの結果をGO structスライスに効率的に変換することを詳しく説明しています。 データベース/SQLのスキャン方法を使用して、手動で解析することを避けて強調しています。 DBタグとロブを使用した構造フィールドマッピングのベストプラクティス

この記事では、ユニットテストのためにGOのモックとスタブを作成することを示しています。 インターフェイスの使用を強調し、模擬実装の例を提供し、模擬フォーカスを維持し、アサーションライブラリを使用するなどのベストプラクティスについて説明します。 articl

この記事では、GENICSのGOのカスタムタイプの制約について説明します。 インターフェイスがジェネリック関数の最小タイプ要件をどのように定義するかを詳しく説明し、タイプの安全性とコードの再利用性を改善します。 この記事では、制限とベストプラクティスについても説明しています

この記事では、goで効率的なファイルの書き込みを詳しく説明し、os.writefile(小さなファイルに適している)とos.openfileおよびbuffered write(大規模ファイルに最適)と比較します。 延期エラー処理、Deferを使用し、特定のエラーをチェックすることを強調します。

この記事では、GOでユニットテストを書くことで、ベストプラクティス、モッキングテクニック、効率的なテスト管理のためのツールについて説明します。

この記事では、トレースツールを使用してGOアプリケーションの実行フローを分析します。 手動および自動計装技術について説明し、Jaeger、Zipkin、Opentelemetryなどのツールを比較し、効果的なデータの視覚化を強調しています
