Rumah > Soal Jawab > teks badan
P粉5026087992023-08-25 17:38:47
Dalam kes serupa saya, bahagian hadapan Angular dan bahagian belakang Php membantu dengan kod di bawah. Mula-mula saya menghantar tajuk:
header("Access-Control-Allow-Origin: http://localhost:4200"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control-Allow-Methods: POST, DELETE, OPTIONS"); header("Access-Control-Max-Age: 3600"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
Selepas mereka saya boleh mengabaikan permintaan pilihan:
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { return 0; }
Pendekatan ini membantu saya mengendalikan kaedah permintaan terbenam "siaran" dan "padam" dalam Angular.
P粉3168908842023-08-25 16:25:07
Baiklah, saya mengalami masalah yang sama baru-baru ini dan saya menyelesaikan semuanya di bahagian belakang sahaja, tanpa bahan .htaccess.
Apabila penyemak imbas menghantar permintaan silang pelayan, ia mula-mula menghantar permintaan OPTIONS untuk memastikan ia sah dan permintaan "sebenar" boleh dihantar. Permintaan "sebenar" dihantar apabila ia mendapat respons yang betul dan sah daripada OPTIONS.
Kini, untuk kedua-dua permintaan di bahagian belakang, anda perlu memastikan pengepala yang betul dikembalikan: jenis kandungan, benarkan asal, benarkan pengepala, dll...
Pastikan bahawa dalam permintaan OPTIONS pada bahagian belakang, aplikasi mengembalikan pengepala dan mengembalikan respons dan bukannya meneruskan aliran penuh aplikasi.
Dalam permintaan "sebenar" anda harus mengembalikan pengepala yang betul dan badan respons biasa.
Contoh:
//The Response object $res = $app->response; $res->headers->set('Content-Type', 'application/json'); $res->headers->set('Access-Control-Allow-Origin', 'http://example.com'); $res->headers->set('Access-Control-Allow-Credentials', 'true'); $res->headers->set('Access-Control-Max-Age', '60'); $res->headers->set('Access-Control-Allow-Headers', 'AccountKey,x-requested-with, Content-Type, origin, authorization, accept, client-security-token, host, date, cookie, cookie2'); $res->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); if ( ! $req->isOptions()) { // this continues the normal flow of the app, and will return the proper body $this->next->call(); } else { //stops the app, and sends the response return $res; }
Perkara yang perlu diingat:
Jika anda menggunakan: "Access-Control-Allow-Credentials" = benar Pastikan "Access-Control-Allow-Origin" bukan "*", ia mesti ditetapkan kepada domain yang betul! (Banyak darah tumpah kat sini :/)
Tentukan pengepala benarkan yang anda akan dapat dalam "Kawalan-Akses-Benarkan-Pengepala" Jika anda tidak mentakrifkannya, permintaan akan gagal