Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menangani isu merentas domain dalam pembangunan PHP

Cara menangani isu merentas domain dalam pembangunan PHP

WBOY
WBOYasal
2023-10-10 21:18:292968semak imbas

Cara menangani isu merentas domain dalam pembangunan PHP

Cara menangani isu merentas domain dalam pembangunan PHP

Pengenalan:
Dengan perkembangan pesat Internet, silang -permintaan domain telah menjadi masalah biasa semasa proses pembangunan. Cross-domain bermaksud bahawa pada bahagian penyemak imbas, halaman web semasa membuat permintaan http merentas domain melalui XMLHttpRequest atau Fetch API, iaitu, mengakses URL bukan asal. Dalam pembangunan PHP, kita sering perlu berurusan dengan permintaan merentas domain. Artikel ini akan memperkenalkan cara menangani isu merentas domain dalam pembangunan PHP dan menyediakan contoh kod khusus.

1 Fahami isu merentas domain

  1. Dasar asal yang sama:
    Dasar asal yang sama ialah dasar keselamatan penyemak imbas, yang mengehadkan Cara dokumen atau skrip web berinteraksi dengan sumber lain. Jika protokol, port dan hos dua URL adalah sama, ia dianggap mempunyai asal yang sama. Jika tidak, ia adalah domain silang.
  2. Perkongsian sumber silang asal (CORS):
    CORS membenarkan pelayan untuk menyatakan dalam respons bahawa halaman web dari asal yang berbeza dibenarkan mengakses sumbernya sendiri.

2 Kaedah untuk menyelesaikan masalah merentas domain

  1. Ubah suai pengepala respons di bahagian pelayan
    Dengan mengubah suai pengepala respons maklumat di bahagian pelayan, Akses kepada permintaan merentas domain boleh dicapai.

Dalam kod PHP, anda boleh menggunakan fungsi pengepala untuk menetapkan pengepala respons. Berikut ialah contoh tetapan yang membenarkan permintaan merentas domain:

header('Access-Control-Allow-Origin: *'); // 允许所有来源的跨域请求
header('Access-Control-Allow-Methods: *'); // 允许所有HTTP方法的跨域请求
header('Access-Control-Allow-Headers: *'); // 允许所有的请求头
  1. JSONP (JSON dengan padding)
    JSONP dicipta secara dinamik Kaedah permintaan merentas domain yang dilaksanakan oleh teg. Dalam JSONP, objek XMLHttpRequest tidak lagi digunakan, tetapi sumber bukan sumber diperoleh dengan memasukkan teg <script></script> secara dinamik. <script></script>标签实现的一种跨域请求方式。在JSONP中,不再使用XMLHttpRequest对象,而是通过动态插入<script></script>标签的方式来获取非同源的资源。

以下是一个简单的PHP返回JSONP格式数据的示例:

<?php
    $callback = $_GET['callback']; // 获取前端传递的回调函数名称
    $data = array('name' => 'John', 'age' => 20);
    $json = json_encode($data);
    echo $callback . '(' . $json . ')'; // 输出jsonp格式的数据
?>

在前端页面中,可以通过创建<script></script>

    Berikut ialah contoh mudah PHP mengembalikan data dalam format JSONP:
  1. <script>
        function handleResponse(data) {
            // 处理获取到的数据
        }
    
        var script = document.createElement('script');
        script.src = 'http://example.com/api.php?callback=handleResponse';
        document.body.appendChild(script);
    </script>

    Di halaman hujung hadapan, anda boleh menciptanya dengan teg untuk meminta data JSONP:
  2. <?php
        $url = $_GET['url']; // 获取前端传递的目标url
        $data = file_get_contents($url, false);
        echo $data; // 将目标服务器的响应返回给客户端
    ?>

Gunakan pelayan proksi

Dalam pembangunan PHP, anda boleh menyelesaikan masalah permintaan merentas domain dengan membina pelayan proksi. Pelayan proksi bertanggungjawab untuk memajukan permintaan pelanggan kepada pelayan sasaran dan mengembalikan respons pelayan sasaran kepada pelanggan. Dengan cara ini, permintaan pelanggan dan pelayan berada dalam domain yang sama, mengelakkan masalah merentas domain.

Berikut ialah contoh kod untuk pelayan proksi PHP mudah:

// 使用ajax方式请求代理服务器
$.ajax({
    url: 'http://example.com/proxy.php',
    data: { url: 'http://example.com/api' },
    success: function(data) {
        // 处理获取到的数据
    }
});

Di halaman hujung hadapan, anda boleh mendapatkan sumber merentas domain dengan menghantar permintaan kepada pelayan proksi : #🎜🎜#rrreee#🎜🎜#Kesimpulan: #🎜🎜# Isu silang domain ialah cabaran biasa dalam pembangunan PHP. Artikel ini memperkenalkan tiga kaedah biasa untuk menyelesaikan masalah merentas domain: pengubahsuaian bahagian pelayan bagi pengepala respons, JSONP dan penggunaan pelayan proksi. Mengikut keperluan dan senario pembangunan khusus, pilih kaedah yang sesuai untuk menangani isu merentas domain dan laksanakan kod khusus berdasarkan situasi sebenar. Dengan mengendalikan isu merentas domain dengan betul, kami boleh memastikan bahawa aplikasi kami boleh berinteraksi dengan tapak lain secara normal dan memberikan pengalaman pengguna yang baik. #🎜🎜#

Atas ialah kandungan terperinci Cara menangani isu merentas domain dalam pembangunan PHP. 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