যদি জাভাস্ক্রিপ্টকে কেবল একই ডোমেন থেকে স্ক্রিপ্টগুলি অ্যাক্সেস করার অনুমতি দেওয়া হয় তবে কোনও ওয়েবসাইট কীভাবে ম্যাসআপগুলি তৈরি করতে পারে যা অন্য ডোমেন থেকে সামগ্রী পড়তে এবং সংশোধন করতে হবে?
যদি জাভাস্ক্রিপ্টকে কেবল একই ডোমেন থেকে স্ক্রিপ্টগুলি অ্যাক্সেস করার অনুমতি দেওয়া হয় তবে কোনও ওয়েবসাইট কীভাবে ম্যাসআপগুলি তৈরি করতে পারে যা অন্য ডোমেন থেকে সামগ্রী পড়তে এবং সংশোধন করতে হবে?
উত্তর:
আপনি যে API টি অ্যাক্সেস করার চেষ্টা করছেন সেটি যদি JSONP সমর্থন করে তবে আপনাকে কেবল আপনার অনুরোধে একটি জাভাস্ক্রিপ্ট ফাংশন নাম সরবরাহ করতে হবে, তারপরে JSONP জাভাস্ক্রিপ্ট ফেরত দেয় myfunc({the:data});
যা আপনি নিয়মিত জাভাস্ক্রিপ্টের মতো চালাতে পারেন, এজন্য আপনি একটি নতুন <script src="www.website.com/somecall?jsonp=myfunc">
ট্যাগ তৈরি করবেন "একটি অনুরোধ প্রেরণ করুন" ( type: jsonp
আপনি $.ajax
অনুরোধগুলিতে ব্যবহার করলে jQuery এটি স্বয়ংক্রিয়ভাবে করে )।
খারাপ দিকটি এটির জন্য JSONP সমর্থন করার জন্য এপিআই সরবরাহকারীর প্রয়োজন।
টার্গেট ওয়েবসাইটটির crossdomain.xml
মূলটিতে এমন একটি ফাইল রয়েছে যতক্ষণ না ফ্ল্যাশ ক্রস-ডোমেন সামগ্রীগুলি অ্যাক্সেস করতে পারে যা জানায় যে এটি এটির অনুমতি দেয়, এটি সাধারণত সার্ভারগুলির ক্ষেত্রে এটিপি সরবরাহ করে)।
ক্ষতিটি হ'ল এটি ব্যবহারকারীর ব্রাউজারে ফ্ল্যাশ প্রয়োজন এবং যে ওয়েবসাইট থেকে আপনি ডেটা পাবেন তার অবশ্যই একটি ক্রসডোমেন.এক্সএমএল থাকতে হবে যা ক্রস-ডোমেনগুলির অনুরোধগুলিকে মঞ্জুরি দেয়।
পিএইচপি-র মতো সার্ভার-সাইড ল্যাঙ্গুয়েজে কোনও বিএস-ডোমেন বিধিনিষেধ নেই, সুতরাং আপনার কাছে এমন স্ক্রিপ্ট থাকতে পারে যা প্রক্সি হিসাবে কাজ করে (যেমন সিআরএল এর মতো HTTP এক্সটেনশনের মাধ্যমে ডাউনলোড করুন)।
যুক্ত হওয়া সুবিধাটি হ'ল আপনি নিজের ওয়েবপৃষ্ঠা / জাভাস্ক্রিপ্টে ফরোয়ার্ড দেওয়ার আগে সার্ভারে ডেটা (বা এমনকি একাধিক উত্স ম্যাসআপ করা) মুছে ফেলতে পারেন, যাতে আপনি কেবলমাত্র ডেটাটির দরকারী অংশটিই বের করতে পারেন, যা মোবাইল ওয়েবআপ করার সময় দুর্দান্ত which যেখানে ব্যান্ডউইথ একটি সমস্যা হতে পারে।
খারাপ দিকটি হ'ল সমস্ত অনুরোধগুলি আপনার সার্ভারের মধ্য দিয়ে যেতে হবে, যাতে আপনার সার্ভারে লোড বৃদ্ধি পায়।
তবে সুবিধাটি হ'ল এটি যে কোনও রিসোর্স নিয়ে কাজ করবে কারণ ক্রসডোমেন বা জসনপ সমর্থন করার লক্ষ্যের প্রয়োজন হয় না। সুতরাং যদি অন্য কিছু কাজ করে না, এটি হবে।
ইন্টারনেট এক্সপ্লোরার ক্রস ডোমেন অনুরোধ আছে
ফায়ারফক্স ৩.৫+ এর ক্রস-অরিজিন শেয়ারিং স্ট্যান্ডার্ড রয়েছে , তবে এর জন্য পুনরায় উত্সের প্রয়োজন যা আপনি বিশেষ শিরোনাম অন্তর্ভুক্ত করতে ব্যবহার করতে চেষ্টা করছেন, যেমন পিএইচপিতে:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
কয়েকটি অন্যান্য প্রধান ব্রাউজারগুলি এটিও সমর্থন করে , সুতরাং যদি আপনাকে পুরানো ব্রাউজারগুলি সমর্থন করার প্রয়োজন না হয় এবং যদি আপনি সেই শিরোনামগুলি প্রেরণের জন্য অ্যাক্সেস করার চেষ্টা করছেন এমন রিসোর্সগুলি পেতে পারেন তবে এটি আপনার সেরা বাজি হতে পারে, অন্যথায় সার্ভার-সাইড স্ক্রিপ্ট আমার প্রস্তাবনা হবে।
ফায়ারফক্সেরও একটি ব্যবহারকারীর সেটিং রয়েছে capability.policy.default.XMLHttpRequest.open
তবে আমি তার ব্রাউজারে কোনও সেটিং পরিবর্তন করা ব্যবহারকারীর উপর নির্ভর করব না।
আপনি তার জন্য API (অন্য ডোমেনের) ব্যবহার করতে পারেন। আপনার জাভাস্ক্রিপ্ট আপনার ওয়েব সার্ভারে থাকা আপনার পিএইচপি ফাইল (বা অন্য স্ক্রিপ্ট ফাইল) (আপনার ডোমেন) কল করবে, যা এপিআই (সিআরএল ব্যবহার করে অন্য কোনও ডোমেনের) কল করবে এবং আপনাকে প্রতিক্রিয়া জানাবে।