Bagaimana Anda bisa men-debug permintaan CORS menggunakan cURL? Sejauh ini saya tidak dapat menemukan cara untuk "mensimulasikan" permintaan preflight.
Inilah cara Anda dapat men-debug permintaan CORS menggunakan curl.
Mengirim permintaan CORS biasa menggunakan cUrl:
curl -H "Origin: http://example.com" --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
The -H "Origin: http://example.com"
bendera adalah domain pihak ketiga membuat permintaan tersebut. Ganti dalam domain apa pun Anda.
The --verbose
bendera print seluruh respon sehingga Anda dapat melihat permintaan dan respon header.
URL yang saya gunakan di atas adalah contoh permintaan ke Google API yang mendukung CORS, tetapi Anda dapat mengganti dengan url apa pun yang Anda uji.
Respons harus mencakup Access-Control-Allow-Origin
tajuk.
Mengirim permintaan preflight menggunakan cUrl:
curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
Ini mirip dengan permintaan CORS biasa dengan beberapa tambahan:
The -H
bendera mengirim tambahan header permintaan preflight ke server
The -X OPTIONS
flag mengindikasikan bahwa ini adalah permintaan PILIHAN HTTP.
Jika permintaan preflight berhasil, respon harus mencakup Access-Control-Allow-Origin
, Access-Control-Allow-Methods
dan Access-Control-Allow-Headers
header respon. Jika permintaan preflight tidak berhasil, tajuk ini seharusnya tidak muncul, atau respons HTTP tidak akan 200.
Anda juga dapat menentukan tajuk tambahan, seperti User-Agent
, dengan menggunakan -H
bendera.
--verbose
opsi, seperti yang disebutkan di atas.--head
:curl -H "Origin: http://example.com" --head https://www.googleapis.com/discovery/v1/apis\?fields\=
curl -H "Access-Control-Request-Method: GET" -H "Origin: http://example.com" -I https://s3.amazonaws.com/your-bucket/file
.Jawaban yang diperbarui mencakup sebagian besar kasus
Access-Control-Allow-*
maka sumber daya Anda mendukung CORS.Dasar pemikiran untuk jawaban alternatif
Saya google pertanyaan ini setiap sekarang dan kemudian dan jawaban yang diterima tidak pernah saya butuhkan. Pertama, mencetak respons tubuh yang banyak teks. Menambahkan
--head
header hanya keluaran. Kedua saat menguji URL S3, kami perlu memberikan tajuk tambahan-H "Access-Control-Request-Method: GET"
.Semoga ini akan menghemat waktu.
sumber
--head
membuat ikal mencetak header, tetapi juga membuat ikal membuatHEAD
permintaan daripada aGET
. Bergantung pada apa yang Anda uji, Anda mungkin ingin mengajukanGET
permintaan. Anda dapat melakukan ini dengan menambahkan--IXGET
.Skrip bash "corstest" di bawah ini berfungsi untuk saya. Itu berdasarkan komentar Jun di atas.
pemakaian
url corstest [-v]
contoh
hasil positif ditampilkan dalam warna hijau
hasil negatif ditampilkan dalam warna merah dan biru
opsi -v akan menampilkan header ikal penuh
terkuat
sumber
Sepertinya ini hanya berfungsi:
curl -I http://example.com
Cari
Access-Control-Allow-Origin: *
di header yang dikembalikansumber
*
tidak berfungsi jika kredensial seperti cookie perlu disajikan dengan permintaan API. Dalam hal ini FQDN juga diperlukan dalamAccess-Control-Allow-Origin
responsAccess-Control-Allow-Credentials: true
. Permintaan yang dikreditkan meskipun tidak ditentukan sebagai persyaratan oleh OP, jadi*
berfungsi untuk permintaan yang tidak diautentikasi.