Apakah itu akses merentas domain? Bagaimana untuk menetapkan kebenaran akses menggunakan PHP

PHPz
Lepaskan: 2023-04-04 22:44:01
asal
2495 orang telah melayarinya

Masalah akses merentas domain ialah masalah biasa dalam pembangunan bahagian hadapan. Apabila kami meminta sumber daripada domain lain yang berbeza melalui Ajax atau mengambil dalam halaman web atau aplikasi, masalah akses merentas domain berlaku. Jika kami tidak menetapkan kebenaran yang berkaitan, akses merentas domain seperti ini tidak akan dibenarkan oleh penyemak imbas. Artikel ini akan memperkenalkan cara menetapkan kebenaran akses merentas domain menggunakan PHP.

1. Apakah itu akses merentas domain?

Akses merentas domain merujuk kepada halaman Web dalam satu domain yang mengakses sumber Web (seperti skrip, helaian gaya, gambar, dll.) dalam domain lain). Akses merentas domain melibatkan mekanisme keselamatan penyemak imbas dan dihadkan atas sebab keselamatan.

Apabila kami menggunakan Ajax atau mengambil dalam halaman Web untuk meminta sumber Web dalam domain lain, masalah merentas domain akan berlaku. Penyemak imbas akan mengeluarkan mesej ralat yang serupa dengan "Akses kepada XMLHttpRequest di 'http://abc.com/api/getdata' dari asal 'http://xyz.com' telah disekat oleh dasar CORS" pada konsol, yang ialah, merentas Permintaan domain telah dipintas oleh penyemak imbas.

2. Mengapakah anda perlu menetapkan kebenaran akses merentas domain

Untuk memastikan keselamatan aplikasi web, penyemak imbas mengehadkan permintaan merentas domain. Jika kami tidak menetapkan kebenaran akses merentas domain yang berkaitan, permintaan merentas domain akan dilarang oleh penyemak imbas dan data yang sepadan tidak boleh diperolehi. Untuk sesetengah aplikasi dengan bahagian hadapan dan belakang yang berasingan atau aplikasi yang perlu mengakses antara muka API, sekatan permintaan merentas domain akan menjadi halangan dan menjejaskan operasi biasa aplikasi web.

3. Cara menetapkan kebenaran akses merentas domain dalam PHP

PHP ialah bahasa pembangunan web berdasarkan bahasa skrip sebelah pelayan Kami boleh menetapkan kebenaran akses merentas domain dalam PHP. Mari perkenalkan cara untuk menetapkan kebenaran akses merentas domain dalam PHP.

1. Gunakan fungsi pengepala() untuk menetapkan pengepala permintaan merentas domain

Kita boleh menggunakan fungsi pengepala() dalam PHP untuk menetapkan pengepala permintaan merentas domain. Pengepala permintaan merentas domain yang dipanggil ialah pengepala "Access-Control-Allow-Origin" dalam protokol HTTP Fungsinya adalah untuk memberitahu penyemak imbas sama ada permintaan itu dibenarkan akses merentas domain.

Berikut ialah kod sampel:

header('Access-Control-Allow-Origin: *');
Salin selepas log masuk

Kod ini digunakan untuk menetapkan pengepala "Access-Control-Allow-Origin", yang parameternya ialah "", yang menunjukkan bahawa mana-mana domain dibenarkan Lawati sumber ini. Sudah tentu, kami juga boleh menggantikan "" dengan nama domain yang ditentukan, menunjukkan bahawa hanya nama domain tertentu dibenarkan untuk mengakses sumber tersebut.

2. Tetapkan pengepala permintaan merentas domain lain

Selain pengepala "Access-Control-Allow-Origin", terdapat beberapa pengepala permintaan merentas domain lain, seperti "Akses -Control- Allow-Credentials", "Access-Control-Allow-Methods", "Access-Control-Allow-Headers", dsb. Anda boleh menggunakan kod yang serupa dengan yang berikut untuk menetapkannya:

header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization');
Salin selepas log masuk

Maksud pengepala ini ialah:

  • Access-Control-Allow-Credentials: Beritahu penyemak imbas sama ada untuk benarkan kuki. Tunggu kelayakan diminta untuk mengakses sumber.
  • Access-Control-Allow-Methods: Beritahu penyemak imbas kaedah HTTP yang disokong oleh sumber ini.
  • Access-Control-Allow-Headers: Beritahu penyemak imbas pengepala permintaan HTTP yang disokong oleh sumber ini.

3. Mengendalikan permintaan prapenerbangan

Apabila penyemak imbas menghantar beberapa permintaan HTTP, seperti Socket.IO sebenarnya adalah varian HTTP, ia bukan sahaja boleh membuat permintaan mudah ( GET, POST), dan juga boleh melaksanakan permintaan kompleks (PUT, DELETE, OPTIONS, dll.). Dalam kes permintaan yang rumit, penyemak imbas akan menghantar permintaan OPTIONS terlebih dahulu untuk meminta pelayan sama ada untuk membenarkan permintaan merentas domain. Pada masa ini, pelayan perlu mengembalikan pengepala respons yang sepadan Dalam pengepala respons ini, anda boleh menetapkan:

  • Access-Control-Allow-Origin: Menunjukkan sumber yang membenarkan permintaan merentas domain (. kadangkala anda boleh menggunakan * untuk mewakili semua sokongan).
  • Access-Control-Allow-Headers: Menunjukkan pengepala permintaan yang disokong.
  • Access-Control-Allow-Methods: Menunjukkan kaedah yang menyokong permintaan merentas domain.

Berikut ialah contoh kod untuk mengendalikan permintaan prapenerbangan:

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
    header('Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization');
    exit;
}
Salin selepas log masuk

Kod ini digunakan untuk mengendalikan permintaan OPTIONS, di mana "Access-Control-Allow-Methods" adalah set, pengepala permintaan merentas domain seperti "Kawalan-Akses-Benarkan-Pengepala".

4. Ringkasan

Menetapkan kebenaran akses merentas domain melalui PHP boleh menyelesaikan masalah merentas domain dalam pembangunan bahagian hadapan. Kami boleh menggunakan fungsi pengepala() dalam PHP untuk menetapkan pengepala permintaan merentas domain, dan kami juga boleh menetapkan pengepala permintaan merentas domain lain untuk memenuhi keperluan perniagaan. Apabila memproses permintaan prapenerbangan, kami perlu mengembalikan pengepala respons yang sepadan untuk memberitahu penyemak imbas sama ada sumber itu menyokong permintaan silang asal. Melalui langkah di atas, kami boleh menyelesaikan masalah merentas domain dengan berkesan dan memastikan operasi biasa aplikasi web.

Atas ialah kandungan terperinci Apakah itu akses merentas domain? Bagaimana untuk menetapkan kebenaran akses menggunakan 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!