Node.js ialah persekitaran berjalan sebelah pelayan yang didorong oleh JavaScript. Tidak seperti persekitaran operasi pihak klien, aplikasi sebelah pelayan biasanya melibatkan permintaan merentas domain. Oleh itu, isu merentas domain juga akan wujud dalam Node.js.
Apakah permintaan merentas domain?
Permintaan merentas domain bermakna apabila klien memulakan permintaan kepada pelayan, sumber sasaran yang diminta adalah berbeza daripada nama domain halaman semasa. Contohnya, jika anda menggunakan Ajax dalam tapak web untuk meminta data daripada tapak web lain, atau meminta pelayan komputer daripada telefon mudah alih, ini adalah permintaan merentas domain.
Mengapa terdapat isu merentas domain?
Sebab masalah dengan permintaan merentas domain ialah penyemak imbas mengikut dasar asal yang sama, iaitu halaman dengan nama domain yang sama, port yang sama dan protokol yang sama boleh mengakses satu sama lain , risiko keselamatan akan timbul. Contohnya, jika anda memulakan permintaan untuk mengakses www.baidu.com dalam www.example.com, data tidak akan diperoleh. Ini kerana penyemak imbas mengehadkan akses kepada permintaan merentas domain dan menolak beberapa gelagat yang boleh menyebabkan isu keselamatan.
Bagaimana untuk menyelesaikan isu merentas domain dalam Node.js?
Terdapat banyak cara untuk menyelesaikan masalah merentas domain dalam Node.js. Berikut ialah beberapa kaedah biasa.
CORS (Perkongsian Sumber Silang Asal, perkongsian sumber silang) ialah mekanisme yang melaluinya pelayan boleh menetapkan pengepala respons, Memberitahu penyemak imbas yang mana permintaan merentas domain boleh dibenarkan. Dalam Node.js, anda boleh menggunakan modul cors untuk menyelesaikan masalah merentas domain dengan cepat dan mudah. Modul cors menyokong tetapan parameter lalai dan juga boleh mengkonfigurasi pengepala respons seperti yang diperlukan. Kod sampel adalah seperti berikut:
const express = require('express'); const cors = require('cors'); const app = express(); app.use(cors()); app.get('/', (req, res) => { res.send('Hello world!'); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
http-proxy-middleware ialah perisian tengah yang boleh membantu kami mencipta proksi. Anda boleh menetapkan alamat sasaran proksi untuk memajukan permintaan kepada nama domain lain untuk mengelakkan sekatan pada permintaan merentas domain. Kod sampel adalah seperti berikut:
const express = require('express'); const { createProxyMiddleware } = require('http-proxy-middleware'); const app = express(); const apiProxy = createProxyMiddleware('/api', { target: 'http://api.example.com', changeOrigin: true, pathRewrite: { '^/api': '' } }); app.use('/api', apiProxy); app.listen(3000, () => { console.log('Server started on port 3000'); });
Apabila memproses permintaan merentas domain, anda juga boleh menetapkan pengepala respons untuk menyelesaikan masalah merentas domain. Dengan menetapkan pengepala Access-Control-Allow-Origin, beritahu penyemak imbas nama domain yang dibenarkan untuk permintaan merentas domain. Kod sampel adalah seperti berikut:
const express = require('express'); const app = express(); app.use((req, res, next) => { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); app.get('/', (req, res) => { res.send('Hello world!'); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
Ringkasan
Masalah merentas domain adalah salah satu masalah biasa di bahagian pelayan, dan ia juga merupakan masalah yang mesti dihadapi oleh pembangun. Dalam Node.js, anda boleh menyelesaikan permintaan merentas domain dengan menetapkan pengepala respons, menggunakan http-proxy-middleware middleware dan modul cors untuk memastikan operasi normal pelayan. Pada masa yang sama, untuk memastikan keselamatan pelayan, kami juga harus mengikut peraturan dasar asal yang sama dan mengendalikan permintaan merentas domain dengan berhati-hati.
Atas ialah kandungan terperinci Adakah terdapat isu merentas domain dalam nodejs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!