Saya sedang mengembangkan aplikasi menggunakan Angular yang berjalan pada port 4200 (localhost). Itu mendapat informasi dari PHP REST API yang berjalan di pos 80 (localhost). Ketika saya mengembangkan halaman hubungi kami itu melemparkan kesalahan terkait dengan kebijakan CORS yang telah diperbaiki dengan menempatkan informasi header berikut di file .htaccess.

Header add Access-Control-Allow-Origin "http://localhost:4200"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Header add Access-Control-Max-Age "36000"

Halaman hubungi kami berfungsi dengan baik sekarang dan saya dapat memposting informasi (permintaan) dan mereka memperbarui dalam database dengan benar. Tetapi sekarang saya telah mengembangkan fungsionalitas register pengguna dan saya menghadapi masalah aneh di sini. Terkadang saya melihat masalah kebijakan CORS yang

Access to XMLHttpRequest at 'http://localhost/carrentalnew/register' from origin 'http://localhost:4200' 
has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does 
not have HTTP ok status.

Jadi ketika saya mendapatkan kesalahan ini, saya akan pergi ke program api PHP yang saya kembangkan, dan memasukkan beberapa info di tengah skrip sehingga skrip gagal. Sebagai contoh berikut ini adalah potongan kode dimana di tengah saya memasukkan "halo" sehingga skrip gagal.

catch(PDOException $ex) {
  // log connection error for troubleshooting and return a json error response
  error_log("Connection Error: ".$ex, 0);
  $response = new Response();
  $response->setHttpStatusCode(500);
  $response->setSuccess(false);
  $response->addMessage("Database connection error");
  $response->send();
  exit;
}

hello

// handle creating new user
// check to make sure the request is POST only - else exit with error response
if($_SERVER['REQUEST_METHOD'] !== 'POST') {
  $response = new Response();
  $response->setHttpStatusCode(405);
  $response->setSuccess(false);
  $response->addMessage("Request method not allowed");
  $response->send();
  exit;
}

Sekarang saya menghapus kata "halo" dan saya mencoba memposting pengguna register lagi dan itu berfungsi dengan baik dan tidak ada masalah sama sekali. Ini adalah perilaku yang sangat aneh yang saya lihat. Adakah yang bisa memberi tahu saya kesalahan apa yang saya lakukan di sini?

Terima kasih, Subbu.

0
Subbu 2 Juni 2020, 20:52

1 menjawab

Jawaban Terbaik

Untuk permintaan lintas asal, browser mengirimkan permintaan pra-penerbangan dengan Opsi Metode. Dalam hal ini kita harus mengirim respons dengan kontrol akses izinkan header asal

Dalam kasus Anda karena Anda telah menambahkan akses ht, kami hanya dapat keluar jika itu adalah metode opsi

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {    
   return 0;    
}    

Saat Anda mengirim respons kesalahan http, browser menganggap ini adalah permintaan Cross Origin yang tidak valid

1
Vinod Sai 2 Juni 2020, 18:02