Baru-baru ini, saya menghadapi beberapa masalah pelik semasa membangunkan projek menggunakan rangka kerja ThinkPHP. Projek kami ialah tapak web paparan gambar, tetapi dalam penyemak imbas, beberapa gambar tidak akan dipaparkan, dan tiada mesej ralat dalam konsol. Melalui carian dan percubaan, kami akhirnya mendapati bahawa ini adalah isu yang disebabkan oleh merentas domain. Dalam siaran ini, saya akan berkongsi proses kami untuk mengenal pasti masalah dan menyelesaikannya.
Pertama, 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. Dasar asal yang sama ialah ciri keselamatan yang sangat penting Ia mengehadkan tapak web untuk hanya mengakses sumber dengan nama domain, protokol dan port yang sama seperti miliknya.
Dalam projek kami, kami menggunakan pustaka pihak ketiga untuk memuatkan imej, dan pustaka ini 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 untuk menentukan nama domain yang boleh mengakses sumber apabila bertindak balas kepada permintaan pelanggan.
Dalam rangka kerja ThinkPHP, kami 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 asal untuk mengakses sumber dan membenarkan POST dan GET cara daripada akses.
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) . ')';
Di sini, kami mula-mula menyemak sama ada parameter panggil balik wujud dalam parameter GET dan jika ia wujud, gunakan parameter itu sebagai nama fungsi. Kemudian sirikan 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.
Untuk meringkaskan, isu merentas domain biasanya merupakan masalah yang sangat biasa semasa pembangunan. Tetapi kami boleh menyelesaikan masalah ini melalui tetapan sisi pelayan. Dalam rangka kerja ThinkPHP, kami boleh menggunakan CORS atau JSONP untuk menyelesaikan isu merentas domain. Saya harap artikel ini dapat membantu pembaca yang memerlukan.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bahawa imej thinkphp tidak dipaparkan di seluruh domain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!