Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk menyelesaikan masalah bahawa imej merentas domain tidak dipaparkan dalam thinkphp

Bagaimana untuk menyelesaikan masalah bahawa imej merentas domain tidak dipaparkan dalam thinkphp

WBOY
WBOYke hadapan
2023-05-31 22:01:37966semak imbas

Mula-mula, mari kita fahami apa itu merentas domain. Cross-domain berlaku antara dua tapak web dengan nama domain yang berbeza Apabila sumber satu tapak web, seperti JS, CSS, Ajax, atau imej, meminta untuk mengakses sumber tapak web lain, mereka disekat kerana sekatan yang sama-. dasar asal. Mengehadkan tapak web untuk hanya mengakses sumber dengan nama domain, protokol dan port yang sama dengan dirinya sendiri ialah ciri keselamatan utama dasar asal yang sama.

Kami menggunakan perpustakaan pihak ketiga untuk memuatkan imej dalam projek, yang menggunakan alamat dengan nama domain yang berbeza untuk menyimpan imej. Oleh itu, dalam penyemak imbas, imej tidak boleh dipaparkan dengan betul apabila ia melintasi domain.

Untuk menyelesaikan masalah ini, kami perlu membuat beberapa tetapan pada bahagian pelayan. Penyelesaian yang paling biasa ialah menyediakan CORS (Cross-Origin Resource Sharing) di bahagian pelayan. CORS membenarkan pelayan menyekat akses kepada sumber kepada hanya nama domain tertentu apabila bertindak balas kepada permintaan pelanggan.

Dalam rangka kerja ThinkPHP, kita boleh melaksanakan CORS dengan menambahkan kod berikut dalam fail index.php:

header('Access-Control-Allow-Origin:*'); //允许所有来源访问
header('Access-Control-Allow-Method:POST,GET'); //允许访问的方式

Kod ini membenarkan semua sumber mengakses sumber dan membenarkan kaedah POST dan GET mengakses .

Perkara penting untuk diperhatikan di sini ialah kod ini harus diletakkan di bahagian atas index.php supaya semua permintaan boleh menggunakan tetapan ini.

Selain menyediakan CORS, kami juga boleh menggunakan kaedah lain untuk menyelesaikan isu merentas domain. Sebagai contoh, JSONP (JSON dengan Padding) ialah kaedah yang boleh dilaksanakan untuk menyelesaikan masalah merentas domain Dengan menambahkan teg skrip pada halaman, data yang perlu diakses dibungkus ke dalam fungsi, dan kemudian hasil yang dikembalikan diterima pada. laman web lain.

Dalam rangka kerja ThinkPHP, kita boleh menggunakan kod berikut untuk menjana kaedah JSONP:

$callback = isset($_GET['callback']) ? $_GET['callback'] : 'callback';
$data = array('name' => 'test', 'age' => 18);
echo $callback . '(' . json_encode($data) . ')';

Kami mula-mula menyemak sama ada parameter GET mempunyai parameter panggil balik, dan jika ya, gunakan parameter ini sebagai nama fungsi. Seterusnya, tukar data untuk dikembalikan ke dalam format JSON dan tambahkannya pada fungsi panggil balik. Akhirnya, apabila memulangkan data, kami mengembalikan fungsi tersebut kepada penyemak imbas bersama-sama dengan data.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bahawa imej merentas domain tidak dipaparkan dalam thinkphp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam