インターネット技術の急速な発展に伴い、データの送信方法はますます多様化しています。ただし、ドメイン間でのデータの転送には、さまざまなセキュリティ制限があるため問題があります。この記事では、Node.js を使用してドメイン間でサービス プロキシを設定する方法を紹介します。
1. クロスドメインとは
クロスドメインとは、クライアントが Ajax 経由で別のドメイン名でリソースをリクエストしたときに、ブラウザが同一生成元ポリシーに準拠し、リクエストはクロスドメインです オリジナル以外のソースからのリクエストはブロックされます。したがって、クロスドメイン要求はセキュリティ ポリシーが原因で失敗することがよくあります。
2. クロスドメイン リクエストが必要な理由
クロスドメイン リクエストの出現は、主にさまざまなサイト間のデータ対話を容易にするためです。たとえば、Web アプリケーションにアクセスするときに、さまざまなサイトからデータを取得する必要がある場合、クロスドメイン リクエストが必要になります。
3. クロスドメイン ソリューション
JSONP は標準的なクロスドメイン ソリューションです。スクリプト タグを動的に作成し、データをコールバック関数でラップし、それらをまとめて返します。
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 サイトの他の関連記事を参照してください。