ホームページ  >  記事  >  ウェブフロントエンド  >  Nodejs httpsリクエストエラーですか?

Nodejs httpsリクエストエラーですか?

王林
王林オリジナル
2023-05-25 12:00:38468ブラウズ

Node.js は、JavaScript と V8 エンジンを使用して構築されたサーバー側アプリケーションです。軽量で効率的なプラットフォームを提供し、開発者が Web アプリケーションやサーバーサイド プログラムなどのプロジェクトを迅速に構築できるようにします。 Node.js では、組み込みモジュールを使用して Web サーバーを作成できます。また、サードパーティのライブラリを使用して HTTP または HTTPS リクエストを送信することもできます。 Node.js で HTTPS リクエストを送信することは非常に一般的な要件ですが、慎重に使用しないとエラーが発生する可能性があります。

HTTPS は、HTTP プロトコルに基づく安全な伝送プロトコルであり、暗号化された伝送に SSL/TLS プロトコルを使用します。 HTTP と比較して、HTTPS はクライアントとサーバー間のデータ送信が改ざんまたは盗聴できないことを保証するため、より安全で信頼性が高くなります。 Node.js では、組み込みの https モジュールを使用して HTTPS リクエストを送信できますが、使用中にいくつかの問題に注意する必要があります。そうしないと、エラーやセキュリティ リスクが発生する可能性があります。

HTTPS リクエストを送信するときに最も一般的なエラーは、SSL/TLS ハンドシェイクの失敗です。通常の状況では、HTTPS リクエストには通常次のプロセスが含まれます:

  1. クライアントは HTTPS リクエストをサーバーに送信します;
  2. サーバーはデジタル証明書を返します;
  3. クライアント デジタル証明書の正当性を検証します。
  4. クライアントはリクエスト データを送信し、サーバーはリクエスト データを受信します。

このプロセスのいずれかのステップに問題があると、HTTPS リクエストが失敗する可能性があります。このうち、デジタル証明書の検証は最も一般的な問題であり、デジタル証明書はサーバーの身元を証明できるため、検証に失敗すると、クライアントはサーバーの真の身元を確認できなくなります。

SSL/TLS ハンドシェイク失敗の一般的な理由は次のとおりです:

  1. 証明書検証の失敗: クライアントは、サーバーによって提供されたデジタル証明書を検証できません。証明書の有効期限が切れているか、期限切れになっている可能性があります。信頼できる機関によって発行されていません。組織によって発行されています;
  2. 時刻同期の問題: クライアントとサーバーのシステム時刻が一致していないため、証明書の有効期限が不正確になります;
  3. 暗号スイートの問題:クライアントとサーバー間の暗号スイートが矛盾しています。互換性があるため、安全な接続を確立できません。
  4. プロキシの問題: リクエストがプロキシ サーバー経由で送信される場合、プロキシが無効になるという問題が発生する可能性があります。サーバーは HTTPS リクエストを処理できません;
  5. DNS 問題: サーバーを解決できない場合、ホスト名もハンドシェイクの失敗の原因になります。

SSL/TLS ハンドシェイクの失敗を回避するには、次の点に注意する必要があります。

  1. サーバー証明書の有効性を確認します。証明書は次のとおりである必要があります。発行機関によって発行され、有効期限が切れていない ;
  2. クライアントの時刻がサーバーの時刻と同期していることを確認します;
  3. 暗号スイートの互換性を判断します: 暗号スイートと同じ暗号スイートを使用することが最善です。サーバー;
  4. プロキシ サーバーが HTTPS リクエストをサポートしているかどうかを確認します;
  5. DNS がサーバーのホスト名を正しく解決しているかどうかを確認します。

Node.js で、https モジュールを使用して HTTPS リクエストを送信する場合は、次の点に注意する必要があります。

http
    プロトコルではなく、
  1. https プロトコルを使用してください。自己署名証明書の場合は、rejectUnauthorized
  2. を使用できます。オプションを
  3. false## に設定すると、証明書の検証をスキップします。プログラムのクラッシュを回避するために、error イベントを処理し、エラーが発生したときにキャッチして適切なタイミングで処理します。
  4. #HTTPS リクエストを開始する前に、DNS を渡してサーバーのドメイン名を解決し、ドメイン名が正しく解決されていることを確認します。
  5. 以下は、Node.js HTTPS リクエスト コードのサンプルです。
  6. const https = require('https');
    
    const options = {
      hostname: 'www.example.com',
      port: 443,
      path: '/api',
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      },
    };
    
    const req = https.request(options, (res) => {
      console.log(`statusCode: ${res.statusCode}`);
      res.on('data', (data) => {
        console.log(data);
      });
    });
    
    req.on('error', (err) => {
      console.error(err);
    });
    
    req.end();
  7. 上記のサンプル コードでは、
  8. https.request
メソッドを使用して、 HTTPS リクエスト。まず、サーバー アドレス、ポート、リクエスト パス、リクエスト メソッド、リクエスト ヘッダー情報など、リクエストのオプション オブジェクトを設定する必要があります。次に、

https.request(options, (res) => {...})

を通じてリクエストを送信します。サーバーが応答すると、コールバック関数がトリガーされます。コールバック関数では、サーバーから返されたデータを読み取り、それを処理できます (上記のコードの

console.log(data) など)。 もちろん、HTTPS リクエストを送信するときに、サーバーがクライアントの ID の検証を必要とする場合は、検証にクライアント証明書を使用する必要もあります。これは、特定のビジネス ニーズに基づいてエンジニアが実装する必要があります。 つまり、プログラムの正確性とセキュリティを確保するには、Node.js で HTTPS リクエストを送信するときにいくつかの問題に注意する必要があります。 SSL/TLS ハンドシェイクエラーに対処する場合は、エラーの原因を慎重に調査する必要がありますが、通常は上記の点で問題を解決できます。関連する規範や基準に従っている限り、プログラムの正常な動作と安全性を確保できます。

以上がNodejs httpsリクエストエラーですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。