Rumah  >  Artikel  >  hujung hadapan web  >  nodejs menetapkan domain silang proksi perkhidmatan

nodejs menetapkan domain silang proksi perkhidmatan

WBOY
WBOYasal
2023-05-25 12:19:38935semak imbas

Dengan perkembangan pesat teknologi Internet, cara penghantaran data menjadi semakin pelbagai. Walau bagaimanapun, pemindahan data merentasi domain adalah masalah kerana pelbagai sekatan keselamatan. Artikel ini akan memperkenalkan cara menggunakan Node.js untuk menyediakan proksi perkhidmatan merentas domain.

1. Apakah itu merentas domain

Merentas domain bermakna apabila pelanggan meminta sumber di bawah nama domain lain melalui Ajax, penyemak imbas akan mematuhi dasar asal yang sama dan mendapati bahawa permintaan ialah merentas domain Permintaan daripada sumber bukan asal akan disekat. Oleh itu, permintaan merentas domain sering gagal disebabkan oleh dasar keselamatan.

2. Mengapakah merentas domain diperlukan

Kemunculan permintaan merentas domain adalah terutamanya untuk memudahkan interaksi data antara pelbagai tapak. Sebagai contoh, apabila kami mengakses aplikasi web, kami mungkin perlu mendapatkan data daripada tapak yang berbeza Dalam kes ini, permintaan merentas domain diperlukan.

3. Penyelesaian merentas domain

  1. JSONP (JSON dengan Padding) merealisasikan merentas domain

JSONP ialah penyelesaian merentas domain standard , yang mencipta teg skrip secara dinamik, membungkus data dalam fungsi panggil balik dan mengembalikannya bersama-sama.

  1. CORS (Cross-Origin Resource Sharing) merealisasikan rentas domain

Spesifikasi CORS ialah standard perkongsian sumber merentas domain yang dibangunkan oleh W3C Dengan menetapkan Akses pada pelayan Pengepala respons -Control-Allow-Origin untuk menyelesaikan isu merentas domain. Walau bagaimanapun, CORS hanya disokong dalam penyemak imbas lanjutan dan tidak disokong oleh penyemak imbas versi rendah.

4. Gunakan Node.js untuk melaksanakan proksi perkhidmatan merentas domain

Proksi perkhidmatan merentas domain merujuk kepada menghantar permintaan kepada pelayan asal yang sama, dan kemudian proksi pelayan meminta data daripada pelayan sasaran , dengan itu melaksanakan permintaan merentas domain. Berikut ialah kod contoh untuk menggunakan Node.js untuk melaksanakan rentas domain proksi perkhidmatan.

//导入所需的模块
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 Ringkasan

Artikel ini memperkenalkan prinsip permintaan merentas domain dan dua penyelesaian merentas domain biasa (JSONP dan CORS), dan juga melaksanakan merentas domain proksi perkhidmatan dengan menggunakan Node .js Kaedah ini menyelesaikan masalah permintaan merentas domain dengan membuat permintaan data pada bahagian pelayan. Permintaan silang sisi pelayan ialah kaedah yang selamat dan stabil, yang boleh menjadikan permintaan merentas domain lebih selamat dan sesuai untuk pelbagai senario yang kompleks.

Atas ialah kandungan terperinci nodejs menetapkan domain silang proksi perkhidmatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn