जवाबों:
यहां बताया गया है कि आप कर्ल का उपयोग करके कॉर्स अनुरोधों को कैसे डीबग कर सकते हैं।
CUrl का उपयोग करके एक नियमित CORS अनुरोध भेजना:
curl -H "Origin: http://example.com" --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
-H "Origin: http://example.com"
झंडा तीसरे पक्ष के अनुरोध करने वाले डोमेन है। अपने डोमेन में जो कुछ भी हो, उसमें स्थान दें।
--verbose
बाहर पूरे प्रतिक्रिया झंडा प्रिंट ताकि आप अनुरोध और प्रतिक्रिया हेडर देख सकते हैं।
मैं जिस url का उपयोग कर रहा हूं वह Google API का एक नमूना अनुरोध है जो CORS का समर्थन करता है, लेकिन आप जो भी url परीक्षण कर रहे हैं, उसमें स्थानापन्न कर सकते हैं।
प्रतिक्रिया में Access-Control-Allow-Origin
हेडर शामिल होना चाहिए ।
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=
यह कुछ परिवर्धन के साथ नियमित CORS अनुरोध के समान दिखता है:
-H
झंडे सर्वर से अतिरिक्त preflight अनुरोध हेडर भेज
-X OPTIONS
ध्वज इंगित करता है कि यह एक HTTP विकल्प अनुरोध है।
Preflight अनुरोध सफल होता है, प्रतिक्रिया को शामिल करना चाहिए Access-Control-Allow-Origin
, Access-Control-Allow-Methods
और Access-Control-Allow-Headers
प्रतिक्रिया हेडर। यदि प्रीफ़लाइट अनुरोध सफल नहीं हुआ, तो ये शीर्ष लेख दिखाई नहीं देने चाहिए, या HTTP प्रतिसाद 200 नहीं होगा।
आप अतिरिक्त हेडर भी निर्दिष्ट कर सकते हैं, जैसे User-Agent
कि -H
ध्वज का उपयोग करके ।
--verbose
विकल्प जोड़ने की आवश्यकता है , जैसा कि ऊपर बताया गया है।
--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-*
तो आपका संसाधन CORS का समर्थन करता है।वैकल्पिक उत्तर के लिए तर्क
मैं इस सवाल को हर अब और फिर Google को स्वीकार करता हूं और मुझे कभी भी इसकी आवश्यकता नहीं होती। सबसे पहले यह प्रतिक्रिया शरीर को प्रिंट करता है जो बहुत अधिक पाठ है। --head
आउटपुट केवल हेडर जोड़ना । S3 URL का परीक्षण करते समय दूसरा हमें अतिरिक्त हेडर प्रदान करने की आवश्यकता है -H "Access-Control-Request-Method: GET"
।
उम्मीद है कि इससे समय की बचत होगी।
--head
हेडर को कर्ल प्रिंट आउट बनाने पर निर्भर करता है , लेकिन यह कर्ल ए के HEAD
बजाय अनुरोध भी करता है GET
। आप जो परीक्षण कर रहे हैं, उसके आधार पर आप एक GET
अनुरोध करना चाहते हैं। आप इसे जोड़कर कर सकते हैं --IXGET
।
नीचे दी गई बाश स्क्रिप्ट "कोरस्टेस्ट" मेरे लिए काम करती है। यह ऊपर जून की टिप्पणी पर आधारित है।
प्रयोग
corstest [-v] url
उदाहरण
./corstest https://api.coindesk.com/v1/bpi/currentprice.json
https://api.coindesk.com/v1/bpi/currentprice.json Access-Control-Allow-Origin: *
सकारात्मक परिणाम हरे रंग में प्रदर्शित होता है
./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
नकारात्मक परिणाम लाल और नीले रंग में प्रदर्शित होता है
-v विकल्प पूर्ण कर्ल हेडर दिखाएगा
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
लगता है जैसे यह काम करता है:
curl -I http://example.com
के लिए देखो Access-Control-Allow-Origin: *
वापस आए हेडर में
*
अगर एपीआई के अनुरोध के साथ कुकी को प्रस्तुत करने की आवश्यकता है तो यह काम नहीं करता है। उस स्थिति में FQDN Access-Control-Allow-Origin
प्रतिक्रिया के साथ-साथ आवश्यक है Access-Control-Allow-Credentials: true
। क्रेडेंशियल अनुरोध हालांकि ओपी द्वारा एक आवश्यकता के रूप में निर्दिष्ट नहीं किए गए थे, इसलिए *
किसी भी अनैतिक अनुरोध के लिए काम करता है।