Maison  >  Article  >  interface Web  >  nodejs définit le proxy de service entre domaines

nodejs définit le proxy de service entre domaines

WBOY
WBOYoriginal
2023-05-25 12:19:38935parcourir

Avec le développement rapide de la technologie Internet, les modes de transmission des données deviennent de plus en plus diversifiés. Cependant, le transfert de données entre domaines constitue un problème en raison de diverses restrictions de sécurité. Cet article explique comment utiliser Node.js pour configurer un proxy de service sur plusieurs domaines.

1. Qu'est-ce que le cross-domain ?

Cross-domain signifie que lorsque le client demande des ressources sous un autre nom de domaine via Ajax, le navigateur se conformera à la politique de même origine et constatera que la requête est une requête inter-domaine. et bloquera cette demande hors domaine. Par conséquent, les requêtes inter-domaines échouent souvent en raison des politiques de sécurité.

2. Pourquoi le cross-domain est-il nécessaire ?

L'émergence des requêtes cross-domain est principalement destinée à faciliter l'interaction des données entre différents sites. Par exemple, lorsque nous accédons à une application Web, nous pouvons avoir besoin d'obtenir des données de différents sites. Dans ce cas, des requêtes inter-domaines sont nécessaires.

3. Solution inter-domaines

  1. JSONP (JSON avec rembourrage) pour obtenir un inter-domaine

JSONP est une solution inter-domaines standard qui crée dynamiquement des balises de script et encapsule les données dans le retour des fonctions de rappel.

  1. CORS (Cross-Origin Resource Sharing) réalise des opérations inter-domaines

La spécification CORS est une norme de partage de ressources inter-domaines développée par le W3C. Elle résout les problèmes inter-domaines en définissant l'en-tête de réponse Access-Control-Allow-Origin. du côté du serveur. Cependant, CORS n'est pris en charge que dans les navigateurs avancés et n'est pas pris en charge par les navigateurs de versions inférieures.

4. Utilisez Node.js pour implémenter le proxy de service inter-domaines

Le proxy de service inter-domaines fait référence à la manière d'implémenter des requêtes inter-domaines en envoyant des requêtes au serveur avec la même origine, puis le proxy du serveur demande des données. du serveur cible. Voici un exemple de code permettant d'utiliser Node.js pour implémenter un proxy de service inter-domaines.

//导入所需的模块
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. Résumé

Cet article présente le principe des requêtes inter-domaines et deux solutions inter-domaines courantes (JSONP et CORS). En même temps, il utilise Node.js pour implémenter le proxy et le processus de service inter-domaines. données via le serveur. La méthode de requête résout le problème des requêtes inter-domaines. Les requêtes croisées côté serveur sont une méthode sûre et stable, qui peut rendre les requêtes inter-domaines plus sécurisées et adaptées à divers scénarios complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn