Mengapakah saya masih mendapat ralat \'Access-Control-Allow-Origin\' apabila saya telah menetapkan pengepala CORS dalam PHP?

Linda Hamilton
Lepaskan: 2024-11-03 02:22:03
asal
659 orang telah melayarinya

Why am I still getting an

CORS Tidak Berfungsi dalam PHP

Cross-Origin Resource Sharing (CORS) membolehkan anda membuat permintaan daripada satu domain ke domain lain. Apabila permintaan dibuat daripada domain lain, penyemak imbas menyemak respons pelayan untuk pengepala tertentu yang menunjukkan sama ada permintaan itu dibenarkan.

Masalah:
Seorang pembangun sedang cuba menghantar permintaan POST daripada www.siteone.com ke www.sitetwo.com menggunakan CORS. Walau bagaimanapun, mereka menghadapi "ralat Access-control-Allow-Origin" walaupun menetapkan pengepala CORS yang diperlukan pada pelayan.

Tajuk Permintaan/Respons:

Response Headers
Connection  Keep-Alive
Content-Length  487
Content-Type    text/html; charset=iso-8859-1
Date    Fri, 23 Aug 2013 05:53:20 GMT
Keep-Alive  timeout=15, max=99
Server  Apache/2.2.15 (CentOS)
WWW-Authenticate    Basic realm="Site two Server - Restricted Area"
Request Headers
Accept  */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Length  43
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Host    www.sitetwo.com
Origin  http://www.siteone.com
Referer http://www.siteone.com/index.html
User-Agent  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0
Salin selepas log masuk

Penyelesaian:
Isunya terletak pada cara pengepala CORS ditetapkan pada pelayan. Kod asal menggunakan pendekatan ringkas yang hanya memasukkan pengepala berikut:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
Salin selepas log masuk

Walau bagaimanapun, mengikut spesifikasi CORS, pengendalian permintaan dengan betul memerlukan pendekatan yang lebih komprehensif. Pembangun mengemas kini kod kepada yang berikut:

if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

    exit(0);
}

// Your actual code goes here
echo "You have CORS!";
Salin selepas log masuk

Kod yang dikemas kini ini bukan sahaja menetapkan pengepala CORS asas, tetapi juga mengendalikan permintaan OPTIONS prapenerbangan, yang digunakan oleh penyemak imbas untuk menentukan sama ada permintaan sebenar dibenarkan. Dengan melaksanakan pendekatan yang lebih teliti ini, pembangun berjaya mendayakan CORS untuk aplikasi mereka.

Atas ialah kandungan terperinci Mengapakah saya masih mendapat ralat \'Access-Control-Allow-Origin\' apabila saya telah menetapkan pengepala CORS dalam 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan