Jawaban:
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
.
curl -H "Access-Control-Request-Method: GET" -H "Origin: http://localhost" --head http://www.example.com/
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.
--head
membuat ikal mencetak header, tetapi juga membuat ikal membuat HEAD
permintaan daripada a GET
. Bergantung pada apa yang Anda uji, Anda mungkin ingin mengajukan GET
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
./corstest https://api.coindesk.com/v1/bpi/currentprice.json
https://api.coindesk.com/v1/bpi/currentprice.json Access-Control-Allow-Origin: *
hasil positif ditampilkan dalam warna hijau
./corstest https://github.com/IonicaBizau/jsonrequest
https://github.com/IonicaBizau/jsonrequest does not support CORS
you might want to visit https://enable-cors.org/ to find out how to enable CORS
hasil negatif ditampilkan dalam warna merah dan biru
opsi -v akan menampilkan header ikal penuh
terkuat
#!/bin/bash
# WF 2018-09-20
# https://stackoverflow.com/a/47609921/1497139
#ansi colors
#http://www.csc.uvic.ca/~sae/seng265/fall04/tips/s265s047-tips/bash-using-colors.html
blue='\033[0;34m'
red='\033[0;31m'
green='\033[0;32m' # '\e[1;32m' is too bright for white bg.
endColor='\033[0m'
#
# a colored message
# params:
# 1: l_color - the color of the message
# 2: l_msg - the message to display
#
color_msg() {
local l_color="$1"
local l_msg="$2"
echo -e "${l_color}$l_msg${endColor}"
}
#
# show the usage
#
usage() {
echo "usage: [-v] $0 url"
echo " -v |--verbose: show curl result"
exit 1
}
if [ $# -lt 1 ]
then
usage
fi
# commandline option
while [ "$1" != "" ]
do
url=$1
shift
# optionally show usage
case $url in
-v|--verbose)
verbose=true;
;;
esac
done
if [ "$verbose" = "true" ]
then
curl -s -X GET $url -H 'Cache-Control: no-cache' --head
fi
origin=$(curl -s -X GET $url -H 'Cache-Control: no-cache' --head | grep -i access-control)
if [ $? -eq 0 ]
then
color_msg $green "$url $origin"
else
color_msg $red "$url does not support CORS"
color_msg $blue "you might want to visit https://enable-cors.org/ to find out how to enable CORS"
fi
Sepertinya ini hanya berfungsi:
curl -I http://example.com
Cari Access-Control-Allow-Origin: *
di header yang dikembalikan
*
tidak berfungsi jika kredensial seperti cookie perlu disajikan dengan permintaan API. Dalam hal ini FQDN juga diperlukan dalam Access-Control-Allow-Origin
respons Access-Control-Allow-Credentials: true
. Permintaan yang dikreditkan meskipun tidak ditentukan sebagai persyaratan oleh OP, jadi *
berfungsi untuk permintaan yang tidak diautentikasi.