আপনি কীভাবে সিআরএল দিয়ে একটি সিওআরএস অনুরোধ ডিবাগ করতে পারেন?


300

আপনি কীভাবে সিআরএল ব্যবহার করে CORS অনুরোধগুলি ডিবাগ করতে পারেন? এখনও অবধি আমি প্রিফলাইট অনুরোধটি "অনুকরণ" করার কোনও উপায় খুঁজে পাইনি।

উত্তর:


495

আপনি কীভাবে কার্ল ব্যবহার করে 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


2
পৃষ্ঠাটি কোনও সিওআরএস শিরোনাম ফেরত বলে মনে হচ্ছে না, এটি কি সঠিক?
জানুস ট্রয়লসেন

1
প্রকৃত শিরোনামগুলি দেখার জন্য, আপনাকে --verboseউপরে বর্ণিত বিকল্পটি যুক্ত করতে হবে ।
দৈত্য

10
বা --head:curl -H "Origin: http://example.com" --head https://www.googleapis.com/discovery/v1/apis\?fields\=
জন বাচির

2
শিরোনামগুলি দেখতে - অন্তর্ভুক্ত করুন।
মিকা টুওপোলা

7
এস 3 এর ক্ষেত্রে, সঠিক পদ্ধতিটি দেওয়া হলে সেই অনুসারে শিরোনামগুলি কেবল যুক্ত করা হয়, আপনি ব্যবহার করে এটি করতে পারেন curl -H "Access-Control-Request-Method: GET" -H "Origin: http://example.com" -I https://s3.amazonaws.com/your-bucket/file
জোসচা

52

আপডেট হওয়া উত্তর যা বেশিরভাগ ক্ষেত্রে অন্তর্ভুক্ত

curl -H "Access-Control-Request-Method: GET" -H "Origin: http://localhost" --head http://www.example.com/
  1. আপনি পরীক্ষা করতে চান এমন URL দিয়ে http://www.example.com/ প্রতিস্থাপন করুন
  2. যদি প্রতিক্রিয়ার অন্তর্ভুক্ত থাকে Access-Control-Allow-*তবে আপনার সংস্থান CORS সমর্থন করে supports

বিকল্প উত্তরের জন্য যুক্তি

আমি এই প্রশ্নটি এখনই গুগল করি এবং স্বীকৃত উত্তর আমার যা প্রয়োজন তা কখনই হয় না। প্রথমে এটি প্রতিক্রিয়ার মূল অংশ ছাপায় যা অনেকগুলি পাঠ্য। যোগ করার পদ্ধতি --headশুধুমাত্র হেডার আউটপুট। দ্বিতীয়ত এস 3 ইউআরএল পরীক্ষা করার সময় আমাদের অতিরিক্ত শিরোনাম সরবরাহ করতে হবে -H "Access-Control-Request-Method: GET"

আশা করি এটি সময় সাশ্রয় করবে।


2
যদি আমি উত্স নির্ধারণ না করে কার্ল করি এবং আমি প্রতিক্রিয়া এবং শিরোনামগুলি (অ্যাক্সেস-কন্ট্রোল-অনুমতি-অরিজিন শিরোনাম সহ) ফিরে পেতে পারি, তার মানে কি আমি আমার সিআরএস ভুলভাবে সেট আপ করেছি? কার্ল -এক্স ' শেষ পয়েন্ট ডটকম' -এইচ 'ক্যাশে-নিয়ন্ত্রণ: নো-ক্যাশে'
হেড

একই @
লুকাশ

1
এটি --headকার্ডগুলি মুদ্রণ করে শিরোনামগুলি তৈরি করার উপর নির্ভর করে , তবে এটি কার্লকে HEADবরং একটি অনুরোধ করে GET। আপনি যা পরীক্ষা করছেন তার উপর নির্ভর করে আপনি একটি GETঅনুরোধ করতে চাইতে পারেন । আপনি যোগ করে এটি করতে পারেন --IXGET
এডান ফিটজপ্যাট্রিক

2
এটা কি পিছনের দিকে নয়? পরিবর্তে মূল উদাহরণ.কম হওয়া উচিত নয়?
ডাস্টিন ইনগ্রাম

4

নীচে ব্যাশ স্ক্রিপ্টটি আমার পক্ষে কাজ করে। এটি উপরের জুনের মন্তব্যের ভিত্তিতে তৈরি ।

ব্যবহার

কর্সটেস্ট [-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

অরিজিন শিরোনাম যুক্ত করা এটি আরও ভাল করে তুলবে e g। -এইচ 'উত্স: mydomain.xyz '
বাস

3

দেখে মনে হচ্ছে ঠিক এটি কাজ করে:

curl -I http://example.com

দেখুন Access-Control-Allow-Origin: *ফিরে হেডার মধ্যে


3
মনে রাখবেন যে *কুকির মতো শংসাপত্রগুলি যদি API এর অনুরোধের সাথে উপস্থাপন করা দরকার তবে এটি কাজ করে না। সেক্ষেত্রে Access-Control-Allow-Originপ্রতিক্রিয়ার পাশাপাশি এফকিউডিএনও প্রয়োজন Access-Control-Allow-Credentials: true। শংসাপত্রযুক্ত অনুরোধগুলি যদিও ওপি কর্তৃক প্রয়োজনীয়তা হিসাবে নির্দিষ্ট করা হয়নি, তাই *যেকোন অনাহুত অনুরোধের জন্য কাজ করে।
গেমসলুটস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.