NetTy WebSocket Serverは401を返し、ブラウザの反応しないソリューションを返します
Nettyを使用してWebsocketサーバーを構築し、トークン検証を実行する場合、トークンが無効な場合、サーバーは401ステータスコードを返して接続を閉じますが、ブラウザはいかなる方法でも反応しない場合があります。この記事では、この問題を分析し、解決策を提供します。
問題の説明
Tokensは、Nettyを使用してWebsocketサーバーを開発するために必要です。トークンの検証が失敗すると、サーバーは401を返して接続を閉じますが、ブラウザは応答せず、フロントエンドが接続の理由を知ることができません。サーバー側のコード例:
private void httpresponse401(Channelhandlercontext ctx、fullhttprequest request){ fullhttpresponse応答= new defaultfullhttpresponse(request.protocolversion()、httpresponsestatus.uthorized); Response.headers()。set(httpheadernames.content_length、0); ctx.writeandflush(response).addlistener(channelfuturelistener.close); ReferenceCountutil.Release(リクエスト); }
フロントエンドJavaScriptコード:
var socket = new WebSocket( "ws://127.0.0.1:18080/ws?token = xxxx");
サーバーは401を返し、接続を閉じますが、ブラウザは決して応答しません。
解決
WebSocketハンドシェイクフェーズ中に401の応答が無視されるため、ブラウザは反応しません。握手段階または接続が確立された後に処理する必要があります。
解決策1:握手段階で401応答を返します
WebSocketハンドシェイクフェーズ(HTTP要求フェーズ)では、トークン検証が失敗した場合、WebSocket接続の確立を避けるためにHTTP 401応答が直接返されます。サーバー側のコードを変更します。
if(!validateToken(request)){ fullhttpresponse応答= new defaultfullhttpresponse(httpversion.http_1_1、httpresponsestatus.uthorized); Response.headers()。set(httpheadernames.content_type、 "text/plain; charset = utf-8"); Response.Headers()。set(httpheadernames.content_length、response.content()。readableBytes()); ctx.writeandflush(response).addlistener(channelfuturelistener.close); 戻る; }
ソリューション2:接続が確立された後にカスタムメッセージを送信する
WebSocket接続が確立された後に401を処理する必要がある場合は、接続が確立された直後にフロントエンドに通知するカスタムメッセージを送信できます。 NettyのWebSocketServerProtocolHandler
にカスタムプロセッサを追加します。
Channel.pipeline()。addlast(new websocketserverprotocolhandler( "/ws"){ @オーバーライド public void usereventtriggered(channelandlercontext ctx、object evt)スロー例外{ if(evt == websocketserverprotocolhandler.serverhandshakestatevent.handshake_complete){ if(!validateToken()){ ctx.writeandflush(new textwebsocketframe( "401 unauthorized"))。 } } super.usereventtriggered(ctx、evt); } });
フロントエンドのJavaScriptコードは、 onmessage
イベントをリッスンする必要があります。
socket.onmessage = function(event){ if(event.data === "401 unauthorized"){ console.log( "接続が閉じ、理由:401不正"); socket.close(); } };
上記の方法により、ブラウザは401ステータスコードを正しく処理でき、フロントエンドは対応するフィードバック情報を受信することができ、それによりブラウザの反応の問題を解決することもできます。選択するソリューションは、特定のアプリケーションシナリオと要件に依存します。
以上がWebSocketサーバーが401を返した後、ブラウザが応答しない理由は何ですか?それを解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

jvm'sperformanceiscompetitivewitherruntimes、sped、safety、andproductivityの提供

javaachievesplatformedentenceTheThejavavirtualMachine(JVM)、avainwithcodetorunonanyplatformwithajvm.1)codescompiledintobytecode、notmachine-specificcode.2)

thejvmisanabstractcomputingMachineCrucialForrunningJavaProgramsDuetoitsPlatForm-IndopentInterChitecture.Itincludes:1)ClassLoaderForloadingClasses、2)Runtimedataareaforforforatastorage、3)executionEngineWithinterter、Jitcompiler、およびGarbagecolfecolfecolfececolfecolfer

jvmhasacloserelationshiptheosasittrantesjavabytecodecodecodecodecodecodecodecodecodecodecodecodecodetructions、manageSmemory、およびhandlesgarbagecollection.thisrelationshipallowsjavatorunonvariousosenvirnments、Butalsedentsはspeedifediferentjvmbeviorhiorsandosendisfredediferentjvmbehbehioorysando

Javaの実装「Write and、Run Everywherewhere」はBytecodeにコンパイルされ、Java仮想マシン(JVM)で実行されます。 1)Javaコードを書き、それをByteCodeにコンパイルします。 2)JVMがインストールされたプラットフォームでByteCodeが実行されます。 3)Javaネイティブインターフェイス(JNI)を使用して、プラットフォーム固有の機能を処理します。 JVMの一貫性やプラットフォーム固有のライブラリの使用などの課題にもかかわらず、Woraは開発効率と展開の柔軟性を大幅に向上させます。

javaachievesplatformentenceTheTheTheJavavirtualMachine(JVM)、CodetorunondifferentoperatingSystemswithOutModification.thejvmcompilesjavacodeplatform-IndopentedbyTecodeを承認することを許可します

javaispowerfulfulduetoitsplatformindepentence、object-orientednature、richstandardlibrary、performancecapability、andstrongsecurityfeatures.1)platformendependenceallowseplicationStorunonaydevicesupportingjava.2)オブジェクト指向のプログラマン型

上位のJava関数には、次のものが含まれます。1)オブジェクト指向プログラミング、サポートポリ型、コードの柔軟性と保守性の向上。 2)例外処理メカニズム、トライキャッチ式ブロックによるコードの堅牢性の向上。 3)ゴミ収集、メモリ管理の簡素化。 4)ジェネリック、タイプの安全性の向上。 5)コードをより簡潔で表現力豊かにするためのAMBDAの表現と機能的なプログラミング。 6)最適化されたデータ構造とアルゴリズムを提供するリッチ標準ライブラリ。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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