একই-উত্স নীতিমালার কারণে আপনি http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
মোতায়েন করা কোনও ফাইল থেকে অজ্যাক্স কল করতে সক্ষম হবেন না ।http://run.jsbin.com
উত্স (ওরফে অরিজিন ) পৃষ্ঠা এবং লক্ষ্য URLটি বিভিন্ন ডোমেন ( run.jsbin.com
এবং www.ecb.europa.eu
) এ থাকায় আপনার কোডটি আসলে কোনও সাধারণ নয়, ক্রস-ডোমেন (সিওআরএস) অনুরোধ করার চেষ্টা করছে GET
।
কয়েকটি কথায়, একই-উত্স নীতিতে বলা হয়েছে যে ব্রাউজারগুলির কেবলমাত্র HTML পৃষ্ঠার একই ডোমেনে পরিষেবাতে অজ্যাক্স কলগুলি মঞ্জুরি দেওয়া উচিত ।
উদাহরণ:
এর একটি পৃষ্ঠা http://www.example.com/myPage.html
কেবলমাত্র সেই জাতীয় পরিষেবার জন্য সরাসরি অনুরোধ করতে http://www.example.com
পারে http://www.example.com/api/myService
। যদি পরিষেবাটি অন্য কোনও ডোমেনে হোস্ট করা হয় (বলুন http://www.ok.com/api/myService
), ব্রাউজারটি সরাসরি কল করবে না (যেমনটি আপনি আশা করেছিলেন)। পরিবর্তে, এটি একটি সিওআরএস অনুরোধ করার চেষ্টা করবে।
এটি শীঘ্রই রাখতে, আপনার ব্রাউজারে বিভিন্ন ডোমেন জুড়ে একটি (সিওআরএস) অনুরোধ সম্পাদন করতে:
Origin
মূল অনুরোধে একটি শিরোনাম অন্তর্ভুক্ত করবে (মান হিসাবে পৃষ্ঠার ডোমেন সহ) এবং এটি যথারীতি সম্পাদন করবে; এবং তারপর
- শুধু যদি সার্ভার প্রতিক্রিয়া যে অনুরোধ রয়েছে পর্যাপ্ত হেডার (
Access-Control-Allow-Origin
হয় এক তাদের ) CORS অনুরোধ যার ফলে ব্রাউজ কল (প্রায় ** ঠিক যেভাবে এটা would যদি HTML পাতায় একই ডোমেনে ছিল না) সম্পন্ন করা হবে।
- যদি প্রত্যাশিত শিরোনাম না আসে, ব্রাউজারটি কেবল ছেড়ে দেয় (যেমনটি এটি আপনাকে করেছিল)।
* উপরেরগুলি একটি সাধারণ অনুরোধে পদক্ষেপগুলি চিত্রিত করে , যেমন GET
কোনও অভিনব শিরোনামহীন নিয়মিত । অনুরোধ সহজ না হয়, তাহলে (মত একটি POST
সঙ্গে application/json
বিষয়বস্তুর প্রকার হিসাবে), ব্রাউজার এটা একটি মুহূর্ত রাখা হবে, এবং, এটা পূরণে আগে, প্রথমে একটি পাঠাব OPTIONS
লক্ষ্য URL- এ অনুরোধ। উপরের মত, এটি কেবল তখনই চলতে থাকবে যদি এই OPTIONS
অনুরোধের প্রতিক্রিয়ায় CORS শিরোনাম থাকে। এই OPTIONS
কলটি প্রিফ্লাইট অনুরোধ হিসাবে পরিচিত ।
** আমি প্রায় বলছি কারণ নিয়মিত কল এবং সিওআরএস কলগুলির মধ্যে অন্যান্য পার্থক্য রয়েছে। একটি গুরুত্বপূর্ণ হ'ল কিছু শিরোনাম, প্রতিক্রিয়াতে উপস্থিত থাকলেও, ব্রাউজারটি যদি তাদেরAccess-Control-Expose-Headers
শিরোনামে অন্তর্ভুক্ত না করা হয় তবে তা বাছাই করা যাবে না ।
কিভাবে ঠিক হবে এটা?
এটা কি শুধু টাইপো ছিল? কখনও কখনও জাভাস্ক্রিপ্ট কোড লক্ষ্য ডোমেন মধ্যে একটি টাইপো আছে। আপনি চেক করা আছে? পৃষ্ঠাটি যদি থাকে www.example.com
তবে কেবলমাত্র নিয়মিত কল করতে হবে www.example.com
! অন্যান্য ইউআরএল, যেমন api.example.com
বা এমনকি example.com
বা ব্রাউজার দ্বারা বিভিন্ন ডোমেন www.example.com:8080
হিসাবে বিবেচিত হয়! হ্যাঁ, বন্দরটি যদি আলাদা হয় তবে এটি অন্যরকম ডোমেন!
শিরোনাম যুক্ত করুন। সিওআরএস সক্ষম করার সহজতম উপায় হ'ল Access-Control-Allow-Origin
সার্ভারের প্রতিক্রিয়াগুলিতে প্রয়োজনীয় শিরোনাম (গুলি ) যুক্ত করা। (প্রতিটি সার্ভার / ভাষার একটি উপায় রয়েছে - এখানে কিছু সমাধান দেখুন )
সর্বশেষ অবলম্বন: যদি আপনার পরিষেবাতে সার্ভার-সাইড অ্যাক্সেস না থাকে তবে আপনি এটিও আয়না করতে পারেন ( রিভার্স প্রক্সির মতো সরঞ্জামগুলির মাধ্যমে ) এবং সেখানে সমস্ত প্রয়োজনীয় শিরোনাম অন্তর্ভুক্ত করতে পারেন।