উত্তর:
আপনি কীভাবে কার্ল ব্যবহার করে CORS অনুরোধগুলি ডিবাগ করতে পারেন তা এখানে।
সিআরএল ব্যবহার করে একটি নিয়মিত সিওআরএস অনুরোধ প্রেরণ:
curl -H "Origin: http://example.com" --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
-H "Origin: http://example.com"
পতাকা তৃতীয় পক্ষের অনুরোধ করছে ডোমেইন হয়। আপনার ডোমেন যাই হোক না কেন তার পরিবর্তে।
--verbose
আউট সমগ্র প্রতিক্রিয়া পতাকা কপি করে প্রিন্ট যাতে আপনি অনুরোধ এবং প্রতিক্রিয়া হেডার দেখতে পারেন।
উপরে আমি যে ইউআরএলটি ব্যবহার করছি তা হ'ল গুগল এপিআই-এর একটি নমুনা অনুরোধ যা CORS সমর্থন করে, তবে আপনি যে url পরীক্ষা করছেন তাতে আপনি বিকল্প প্রতিস্থাপন করতে পারেন।
প্রতিক্রিয়াটিতে Access-Control-Allow-Origin
শিরোলেখ অন্তর্ভুক্ত করা উচিত ।
সিআরএল ব্যবহার করে একটি প্রিফলাইট অনুরোধ পাঠানো হচ্ছে:
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=
এটি কয়েকটি সংযোজন সহ নিয়মিত সিওআরএস অনুরোধের অনুরূপ:
-H
পতাকা সার্ভারে অতিরিক্ত preflight অনুরোধ হেডার পাঠাতে
-X OPTIONS
পতাকা নির্দেশ করে যে এটি একটি HTTP বিকল্প অনুরোধ।
Preflight অনুরোধ সফল হয়, তাহলে সাড়া অন্তর্ভুক্ত করা উচিত Access-Control-Allow-Origin
, Access-Control-Allow-Methods
এবং Access-Control-Allow-Headers
প্রতিক্রিয়া হেডার। প্রিফলাইট অনুরোধটি সফল না হলে, এই শিরোনামগুলি উপস্থিত হওয়া উচিত নয়, বা এইচটিটিপি প্রতিক্রিয়া 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 সমর্থন করে supportsবিকল্প উত্তরের জন্য যুক্তি
আমি এই প্রশ্নটি এখনই গুগল করি এবং স্বীকৃত উত্তর আমার যা প্রয়োজন তা কখনই হয় না। প্রথমে এটি প্রতিক্রিয়ার মূল অংশ ছাপায় যা অনেকগুলি পাঠ্য। যোগ করার পদ্ধতি --head
শুধুমাত্র হেডার আউটপুট। দ্বিতীয়ত এস 3 ইউআরএল পরীক্ষা করার সময় আমাদের অতিরিক্ত শিরোনাম সরবরাহ করতে হবে -H "Access-Control-Request-Method: GET"
।
আশা করি এটি সময় সাশ্রয় করবে।
--head
কার্ডগুলি মুদ্রণ করে শিরোনামগুলি তৈরি করার উপর নির্ভর করে , তবে এটি কার্লকে HEAD
বরং একটি অনুরোধ করে GET
। আপনি যা পরীক্ষা করছেন তার উপর নির্ভর করে আপনি একটি GET
অনুরোধ করতে চাইতে পারেন । আপনি যোগ করে এটি করতে পারেন --IXGET
।
নীচে ব্যাশ স্ক্রিপ্টটি আমার পক্ষে কাজ করে। এটি উপরের জুনের মন্তব্যের ভিত্তিতে তৈরি ।
ব্যবহার
কর্সটেস্ট [-v] ইউআরএল
উদাহরণ
./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: *
ফিরে হেডার মধ্যে
*
কুকির মতো শংসাপত্রগুলি যদি API এর অনুরোধের সাথে উপস্থাপন করা দরকার তবে এটি কাজ করে না। সেক্ষেত্রে Access-Control-Allow-Origin
প্রতিক্রিয়ার পাশাপাশি এফকিউডিএনও প্রয়োজন Access-Control-Allow-Credentials: true
। শংসাপত্রযুক্ত অনুরোধগুলি যদিও ওপি কর্তৃক প্রয়োজনীয়তা হিসাবে নির্দিষ্ট করা হয়নি, তাই *
যেকোন অনাহুত অনুরোধের জন্য কাজ করে।