Ringkaskan tiga kaedah untuk melaksanakan rentas domain Ajax dalam PHP

PHPz
Lepaskan: 2023-04-11 15:10:01
asal
928 orang telah melayarinya

Dengan populariti pemisahan bahagian hadapan dan belakang, ia telah menjadi operasi biasa dalam pembangunan web untuk bahagian hadapan untuk memanggil antara muka bahagian belakang dan mendapatkan data melalui teknologi Ajax.

Walau bagaimanapun, disebabkan dasar asal penyemak imbas yang sama, halaman web daripada sumber yang berbeza (protokol, nama domain atau port yang berbeza) tidak boleh mengakses DOM dan kuki masing-masing, yang menjadikan akses merentas domain sebagai keperluan yang sangat biasa. Terdapat banyak cara untuk menyelesaikan masalah ini.

Artikel ini akan memperkenalkan tiga cara untuk melaksanakan rentas domain Ajax dalam PHP.

1. JSONP

JSONP (JSON dengan Padding) ialah penyelesaian yang sangat popular apabila bahagian hadapan memulakan permintaan merentas domain. Ia sebenarnya satu cara untuk "menipu" penyemak imbas, mengambil kesempatan daripada fakta bahawa teg <script> tidak mempunyai sekatan merentas domain untuk mencapai akses merentas domain. Prinsipnya adalah untuk menjana coretan kod JavaScript secara dinamik untuk membalas permintaan pada bahagian pelayan Coretan kod akan memanggil fungsi JavaScript dengan nama tertentu (nama fungsi panggil balik) dan menghantar data yang diproses oleh bahagian pelayan sebagai parameter kepada. fungsi ini. Ini mencapai kesan akses merentas domain.

JSONP digunakan seperti berikut:

  1. Kod pelanggan:
function handleJsonp(data) {
  console.log(data);
}
const script = document.createElement('script');
script.src = 'http://example.com/api?callback=handleJsonp';
document.head.appendChild(script);
Salin selepas log masuk
  1. Kod pelayan:
<?php
$data = array(&#39;foo&#39; => 'bar');
$callback = $_GET['callback'];
echo sprintf('%s(%s);', $callback, json_encode($data));
?>
Salin selepas log masuk

Dalam kod ini, hasil pemulangan daripada pelayan ialah coretan kod JavaScript yang mengandungi panggilan fungsi panggil balik Selepas pelanggan mendapat data, ia akan secara automatik melaksanakan fungsi panggil balik dan menggunakan data yang dikembalikan oleh pelayan sebagai parameter. daripada fungsi panggil balik. Kelebihan

JSONP ialah keserasian yang baik Keserasian hanya terhad oleh sejauh mana penyemak imbas menyokong teg <script> Walau bagaimanapun, kelemahannya ialah terdapat isu keselamatan kerana fungsi panggil balik dilaksanakan pelanggan dan kami tidak dapat menjaminnya. Fungsi ini melaksanakan logik yang kami jangkakan Jika fungsi panggil balik berniat jahat melepasi kod berniat jahat, akan ada risiko diserang oleh XSS.

2. Mod proksi

Mod proksi ialah satu lagi penyelesaian merentas domain yang popular. Idea asasnya ialah untuk menyediakan proksi pada pelayan untuk mengakses URL yang ditentukan, dan kemudian mengembalikan data yang diperoleh daripada pelayan proksi kepada klien. Dengan cara ini, pelanggan boleh terus mengakses pelayan proksi daripada sumber yang sama, dan pelayan proksi kemudian mengakses pelayan sasaran merentas domain dan memajukan data yang dikembalikan oleh pelayan sasaran.

Mod proksi digunakan seperti berikut:

  1. Kod pelanggan:
fetch('http://example.com/proxy_api')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
Salin selepas log masuk
  1. Kod pelayan:
<?php
$url = &#39;http://example.com/api&#39;;
$data = json_decode(file_get_contents($url), true);
echo json_encode($data);
?>
Salin selepas log masuk

Dalam kod ini, permintaan pelanggan dihantar ke pelayan proksi Pelayan proksi mengembalikan data yang dikembalikan oleh pelayan sasaran kepada pelanggan, dengan itu merealisasikan permintaan pelanggan untuk akses merentas domain.

Kelebihan mod proksi ialah keselamatan yang baik, kerana pelanggan hanya akan mengakses pelayan proksi asal yang sama, dan pelayan proksi kemudiannya akan mengakses pelayan sasaran merentas domain, dengan itu berkesan mengelakkan keselamatan yang disebabkan oleh akses merentas domain berisiko, tetapi kelemahannya ialah kod sebelah pelayan tambahan perlu dibangunkan, yang meningkatkan beban kerja tambahan dan kos pembangunan.

3. CORS

CORS ialah penyelesaian akses merentas domain yang paling popular. Ia menetapkan pengepala respons pada pelayan untuk memberitahu pelanggan sama ada untuk membenarkan akses merentas domain, dengan itu mencapai kawalan keselamatan akses merentas domain.

CORS digunakan seperti berikut:

  1. Kod pelanggan:
fetch('http://example.com/api', {
  mode: 'cors'
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
Salin selepas log masuk
  1. Kod pelayan:
<?php
header(&#39;Access-Control-Allow-Origin: *&#39;);
$data = array(&#39;foo&#39; => 'bar');
echo json_encode($data);
?>
Salin selepas log masuk

Dalam kod ini, pelayan menetapkan pengepala respons Access-Control-Allow-Origin:*, menunjukkan bahawa semua sumber dibenarkan untuk mengakses antara muka Pelanggan memberitahu penyemak imbas bahawa permintaan akan diteruskan dengan menetapkan parameter mode: 'cors' dalam permintaan. Akses merentas domain.

Kelebihan CORS ialah ia menyokong secara asli dan tidak memerlukan kerja pembangunan tambahan Namun, kelemahannya ialah ia tidak menyokong IE8/9 dan perlu disokong daripada pelayan -akses domain nama subdomain.

Di atas ialah tiga kaedah merentas domain untuk PHP melaksanakan Ajax Dalam projek sebenar, anda harus memilih penyelesaian merentas domain yang paling sesuai mengikut situasi tertentu.

Atas ialah kandungan terperinci Ringkaskan tiga kaedah untuk melaksanakan rentas domain Ajax dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan