Dengan perkembangan berterusan teknologi rangkaian moden, aplikasi Web telah menjadi bahagian yang amat diperlukan dalam kehidupan seharian manusia. Walau bagaimanapun, disebabkan sekatan keselamatan aplikasi web dan sekatan dasar asal yang sama penyemak imbas, aplikasi ini menghadapi beberapa kesukaran apabila berinteraksi dengan data. Salah satu masalah yang paling biasa ialah interaksi data merentas domain.
Dalam interaksi data merentas domain, aplikasi web perlu mendapatkan dan mengendalikan data daripada sumber yang berbeza. Walaupun teknologi merentas domain seperti CORS (Cross-Origin Resource Sharing) dan JSONP (JSON with Padding) sudah disokong dalam penyemak imbas moden, dalam beberapa kes, PHP, sebagai bahasa back-end yang biasa digunakan dalam pembangunan Web, masih perlu memainkan peranan yang sangat penting untuk mencapai interaksi data merentas domain.
Artikel ini akan memperkenalkan cara menggunakan PHP untuk mencapai interaksi data merentas domain dan membincangkan beberapa penyelesaian biasa.
Sebelum mula menggunakan PHP untuk melaksanakan interaksi data merentas domain, anda mesti terlebih dahulu memahami jenis interaksi data merentas domain.
CORS (Perkongsian Sumber Silang Asal) ialah mekanisme yang disokong oleh penyemak imbas moden yang membolehkan aplikasi web mengakses data mereka daripada sumber yang berbeza. Permintaan merentas domain CORS memberitahu penyemak imbas sama ada permintaan dibenarkan melalui pengepala HTTP standard yang dipratakrifkan. Untuk permintaan silang asal CORS, pelayan perlu menambah pengepala respons khusus pada respons untuk memberitahu pelayar permintaan yang boleh diterima.
JSONP (JSON dengan Padding) ialah teknologi yang boleh memintas dasar asal yang sama penyemak imbas Ia mengambil kesempatan daripada fakta bahawa atribut src teg tidak dihadkan oleh dasar asal yang sama. Permintaan JSONP tidak dianggap sebagai permintaan merentas domain oleh penyemak imbas, jadi mereka boleh mengakses data secara langsung daripada domain lain.
Prinsip permintaan JSONP ialah menambahkan teg skrip pada halaman dan atribut src teg menghala ke URL. URL disediakan oleh pelayan, dan ia mengembalikan sekeping kod JavaScript Apabila kod tersebut dilaksanakan, fungsi panggil balik yang ditentukan akan dipanggil dan data yang dikembalikan oleh pelayan akan dihantar ke fungsi panggil balik sebagai parameter.
JSONP dicirikan oleh kesederhanaan dan kemudahan penggunaan, tetapi terdedah kepada XSS (serangan skrip merentas tapak).
Selain itu, terdapat beberapa teknologi interaksi data merentas domain lain, seperti imej lutsinar (Imej Lutsinar), pemesejan silang bingkai (Pemesejan Dokumen Merentas), dsb. Walau bagaimanapun, teknologi ini tidak cukup matang dan mempunyai keadaan penggunaan yang keras, jadi ia tidak banyak digunakan dalam pembangunan sebenar.
Dalam pembangunan sebenar, teknologi merentas domain yang berbeza boleh digunakan bergantung pada situasi. Beberapa teknologi rentas domain PHP biasa akan diperkenalkan di bawah.
Menggunakan CORS dalam PHP memerlukan menetapkan pengepala respons. Contohnya, untuk membenarkan semua nama domain mengakses data pada pelayan, anda boleh menggunakan kod berikut:
header("Access-Control-Allow-Origin: *");
Jika anda hanya membenarkan nama domain tertentu mengakses data pada pelayan, anda boleh menggunakan kod berikut:
header("Access-Control-Allow-Origin: http://example.com");
di mana , http://example.com ialah nama domain yang membenarkan akses kepada data pada pelayan.
Perlu diingatkan bahawa jika anda perlu membawa kuki untuk akses merentas domain, anda juga perlu menetapkan Access-Control-Allow-Credentials kepada benar di sebelah pelayan, contohnya:
header('Access-Control-Allow-Origin: http://example.com'); header('Access-Control-Allow-Credentials: true');
Tidak seperti CORS, Permintaan merentas domain JSONP Ini dilakukan dengan menambahkan teg skrip. Dalam PHP, anda perlu membungkus data ke dalam sekeping kod JavaScript dan memanggil fungsi panggil balik apabila mengembalikan data mengikut nama fungsi panggil balik yang disediakan oleh klien. Contohnya:
<?php $data = array("name" => "John", "age" => 30); $callback = $_GET['callback']; echo $callback . '(' . json_encode($data) . ')'; ?>
Dalam kod di atas, $_GET['panggilan balik'] mendapat nama fungsi panggil balik yang disediakan oleh pelanggan.
Perlu diingatkan bahawa apabila pelayan mengembalikan data, ia mesti membungkus data dengan betul ke dalam sekeping kod JavaScript dan memanggil fungsi panggil balik, jika tidak, pelanggan tidak akan dapat menerima data dengan betul.
PHP, sebagai bahasa back-end yang biasa digunakan, menyediakan pelbagai penyelesaian pertukaran data merentas domain. Dalam pembangunan sebenar, penyelesaian yang sesuai harus dipilih berdasarkan keperluan khusus. Perlu diingatkan bahawa isu keselamatan mesti diberi perhatian apabila berurusan dengan interaksi data merentas domain untuk mengelakkan isu keselamatan seperti serangan skrip merentas tapak.
Atas ialah kandungan terperinci Cara PHP melaksanakan interaksi data merentas domain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!