nodejsはクロスドメインのサービスプロキシを設定します

WBOY
リリース: 2023-05-25 12:19:38
オリジナル
971 人が閲覧しました

インターネット技術の急速な発展に伴い、データの送信方法はますます多様化しています。ただし、ドメイン間でのデータの転送には、さまざまなセキュリティ制限があるため問題があります。この記事では、Node.js を使用してドメイン間でサービス プロキシを設定する方法を紹介します。

1. クロスドメインとは

クロスドメインとは、クライアントが Ajax 経由で別のドメイン名でリソースをリクエストしたときに、ブラウザが同一生成元ポリシーに準拠し、リクエストはクロスドメインです オリジナル以外のソースからのリクエストはブロックされます。したがって、クロスドメイン要求はセキュリティ ポリシーが原因で失敗することがよくあります。

2. クロスドメイン リクエストが必要な理由

クロスドメイン リクエストの出現は、主にさまざまなサイト間のデータ対話を容易にするためです。たとえば、Web アプリケーションにアクセスするときに、さまざまなサイトからデータを取得する必要がある場合、クロスドメイン リクエストが必要になります。

3. クロスドメイン ソリューション

  1. JSONP (パディング付き JSON) によるクロスドメインの実現

JSONP は標準的なクロスドメイン ソリューションです。スクリプト タグを動的に作成し、データをコールバック関数でラップし、それらをまとめて返します。

  1. CORS (Cross-Origin Resource Sharing) でクロスドメインを実現

CORS 仕様は、W3C が開発したクロスドメインのリソース共有規格です。クロスドメインの問題を解決するためのserver -Control-Allow-Origin応答ヘッダー。ただし、CORS は高度なブラウザーでのみサポートされており、以前のバージョンのブラウザーではサポートされません。

4. Node.js を使用してクロスドメイン サービス プロキシを実装する

クロスドメイン サービス プロキシとは、同じソースのサーバーにリクエストを送信し、サーバー プロキシがデータをリクエストすることを指します。ターゲット サーバーからのリクエストを実行し、クロスドメイン リクエストを実装します。以下は、Node.js を使用してサービス プロキシ クロスドメインを実装するためのサンプル コードです。

//导入所需的模块
const http = require('http');
const https = require('https');
const url = require('url');
const querystring = require('querystring');

//创建HTTP服务器
http.createServer(function(req,res) {
  //获取请求URL
  let aimUrl = req.url;

  //解析请求地址
  let urlObj = url.parse(aimUrl,true);

  //获取目标地址
  let targetUrl = urlObj.query.url;

  //解析参数
  let paramsObj = urlObj.query;

  //删除URL中的url参数
  delete paramsObj.url;

  //将JSON格式的querystring参数转化为querystring
  let params = querystring.stringify(paramsObj);

  //设置目标URL
  let options = {
    protocol: url.parse(targetUrl).protocol,
    hostname: url.parse(targetUrl).hostname,
    port: url.parse(targetUrl).port,
    path: url.parse(targetUrl).pathname + '?' + params,
    method: 'GET',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  };

  //发起请求
  let request = https.request(options, function(response) {
    //设置响应数据类型
    res.writeHead(response.statusCode, {'Content-Type': 'application/json'});

    //监听data事件
    response.on('data', function(chunk) {
      res.write(chunk);
    });

    //监听end事件
    response.on('end', function() {
      res.end();
    });
  });

  //设置请求超时时间
  request.setTimeout(3000, function() {
    res.writeHead(500, {'Content-Type': 'application/json'});
    res.write(JSON.stringify({error: 'timeout'}));
    res.end()
  });

  //监听错误事件
  request.on('error', function(error) {
    res.writeHead(500, {'Content-Type': 'application/json'});
    res.write(JSON.stringify({error: error}));
    res.end();
  });

  //设置请求方式
  request.method = req.method;

  //发起请求
  if (req.method == 'POST' || req.method == 'PUT') {
    req.on('data', (data) => {
      request.write(data);
    });
    req.on('end', () => {
      request.end();
    });
  } else {
    request.end();
  }
}).listen(8080, 'localhost');
ログイン後にコピー

5. 概要

この記事では、クロスドメイン リクエストの原理と 2 つの一般的なクロスドメイン ソリューション (JSONP と CORS) を紹介し、また Node.js を使用してサービス プロキシ クロスを実装します。 -domain この方法は、サーバー側でデータ要求を行うことにより、クロスドメイン要求の問題を解決します。サーバー側のクロスリクエストは安全で安定した方法であり、クロスドメインリクエストをより安全にし、さまざまな複雑なシナリオに適したものにすることができます。

以上がnodejsはクロスドメインのサービスプロキシを設定しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート