Yanıtlar:
Curl kullanarak CORS isteklerinde nasıl hata ayıklayabilirsiniz.
CUrl kullanarak düzenli bir CORS isteği gönderme:
curl -H "Origin: http://example.com" --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
-H "Origin: http://example.com"
Bayrak istekte üçüncü parti etki alanıdır. Alan adınız ne olursa olsun değiştirin.
--verbose
Tüm yanıt dışarı bayrak baskılar böylece istek ve yanıt başlıklarını görebilirsiniz.
Yukarıda kullandığım url, CORS'yi destekleyen bir Google API'sına yönelik örnek bir istektir, ancak test ettiğiniz URL'yi değiştirebilirsiniz.
Yanıt, Access-Control-Allow-Origin
başlığı içermelidir .
CUrl kullanarak ön kontrol isteği gönderme:
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=
Bu, birkaç eklemeyle normal CORS isteğine benzer:
-H
Bayraklar sunucuya ek uçuş öncesi isteği başlıklarını göndermek
-X OPTIONS
Bayrak bu bir HTTP SEÇENEKLERİ isteği olduğunu gösterir.
Uçuş öncesi isteği başarılı olursa, tepki içermelidir Access-Control-Allow-Origin
, Access-Control-Allow-Methods
ve Access-Control-Allow-Headers
tepki başlıklarını. Ön kontrol isteği başarılı olmazsa, bu üstbilgiler görünmemelidir veya HTTP yanıtı 200 olmayacaktır.
Bayrağı User-Agent
kullanarak ek başlıklar da belirleyebilirsiniz -H
.
--verbose
, yukarıda belirtildiği gibi seçeneği eklemeniz gerekir .
--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-*
, kaynağınız CORS'i destekler.Alternatif cevap için gerekçe
Ben her zaman bu soruyu google ve kabul edilen cevap asla ihtiyacım olan şey değil. İlk olarak çok fazla metin olan yanıt gövdesini yazdırır. Ekleme --head
sadece başlıkları çıkışlar. İkincisi, S3 URL'lerini test ederken ek başlık sağlamamız gerekir -H "Access-Control-Request-Method: GET"
.
Umarım bu zaman kazanır.
--head
, başlıkların kıvrılma baskısını yapmaya dayanır , ancak kıvrımın a HEAD
yerine bir istekte bulunmasını sağlar GET
. Neyi test ettiğinize bağlı olarak, bir GET
istekte bulunmak isteyebilirsiniz. Bunu ekleyerek yapabilirsiniz --IXGET
.
Aşağıdaki bash betiği "corstest" benim için çalışıyor. Yukarıda Jun'un yorumuna dayanmaktadır .
kullanım
en sağlam [-v] url
örnekler
./corstest https://api.coindesk.com/v1/bpi/currentprice.json
https://api.coindesk.com/v1/bpi/currentprice.json Access-Control-Allow-Origin: *
pozitif sonuç yeşil renkte görüntülenir
./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
negatif sonuç kırmızı ve mavi ile gösterilir
-v seçeneği tam kıvrılma başlıklarını gösterir
corstest
#!/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
Sadece bu işe yarıyor gibi görünüyor:
curl -I http://example.com
Access-Control-Allow-Origin: *
Döndürülen başlıkları arayın
*
Bir çerez gibi kimlik bilgilerinin API isteği ile sunulması gerekiyorsa bunun işe yaramayacağını unutmayın . Bu durumda Access-Control-Allow-Origin
yanıtta FQDN de gereklidir Access-Control-Allow-Credentials: true
. Kimlik *
doğrulamalı istekler , OP tarafından bir gereksinim olarak belirtilmemiş olsa da, kimliği doğrulanmamış tüm istekler için geçerlidir.