javascript - কিভাবে অ্যাক্সেস-কন্ট্রোল-অনুমতি-মূল শিরোনাম কাজ করে?





cross-domain cors (10)


পাইথন ইন আমি বড় সাফল্য সঙ্গে Flask-CORS লাইব্রেরি ব্যবহার করা হয়েছে। এটা CORS সুপার সহজ এবং যন্ত্রহীন সঙ্গে ডিল করে তোলে। আমি নীচের লাইব্রেরি এর ডকুমেন্টেশন থেকে কিছু কোড যোগ।

ইনস্টল করার:

$ pip install -U flask-cors

সহজ উদাহরণ যা সকল রুটে সমস্ত ডোমেইনের জন্য CORS কে অনুমতি দেয়:

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route("/")
def helloWorld():
  return "Hello, cross-origin-world!"

আরো নির্দিষ্ট উদাহরণের জন্য ডকুমেন্টেশন দেখুন। আমি আইওনিক অ্যাপ্লিকেশনে CORS সমস্যাটি ঘিরে উপরের সাধারণ উদাহরণটি ব্যবহার করেছি আমি বিল্ডিংয়ের জন্য একটি পৃথক ফ্লাস্ক সার্ভার অ্যাক্সেস করতে হবে।

দৃশ্যত, আমি সম্পূর্ণরূপে তার semantics ভুল বুঝেছি। আমি এই মত কিছু চিন্তা:

  1. একটি ক্লায়েন্ট http: // siteA - origin থেকে জাভাস্ক্রিপ্ট কোড MyCode.js ডাউনলোড করে।
  2. MyCode.js এর প্রতিক্রিয়া শিরোনাম অ্যাক্সেস-কন্ট্রোল- এঞ্জেলেস -অরিজিন: http: // সাইটবি , যা আমি মনে করি তার মানে বোঝানো হয়েছে যে MyCode.js সাইট বিতে ক্রস-উত্স রেফারেন্স তৈরি করার অনুমতি দেওয়া হয়েছিল।
  3. ক্লায়েন্ট MyCode.js এর কিছু কার্যকারিতা ট্রিগার করে, যা ক্রস-উৎপত্তি অনুরোধগুলি সত্ত্বেও http: // siteB তে অনুরোধ করে, যা জরিমানা হওয়া উচিত।

আচ্ছা, আমি ভুল। এটা এ সব কাজ করে না। সুতরাং, আমি ক্রস-উত্স সম্পদ ভাগ করে নেব এবং W3C সুপারিশে ক্রস-অরিজিন রিসোর্স ভাগ করে নেওয়ার চেষ্টা করেছি

এক জিনিস নিশ্চিত - আমি এখনও এই শিরোনাম ব্যবহার করা অনুমিত হয় না বুঝতে পারছি না।

আমার সাইট এ এবং সাইট বি উভয়ের সম্পূর্ণ নিয়ন্ত্রণ আছে। আমি কীভাবে সাইট A থেকে ডাউনলোড হওয়া জাভাস্ক্রিপ্ট কোডটি এই শিরোনামের সাহায্যে সাইট B এ সংস্থানগুলি অ্যাক্সেস করতে সক্ষম করব?

দ্রষ্টব্য

আমি JSONP ব্যবহার করতে চান না।




1. একটি ক্লায়েন্ট http: // siteA - origin থেকে জাভাস্ক্রিপ্ট কোড MyCode.js ডাউনলোড করে।

ডাউনলোড করার কোডটি - আপনার এইচটিএমএল স্ক্রিপ্ট ট্যাগ বা জাভাস্ক্রিপ্ট থেকে xhr অথবা যাই হোক না কেন - আসুন, http: // siteZ । এবং, যখন ব্রাউজার MyCode.js কে অনুরোধ করে, তখন এটি একটি উত্স প্রেরণ করে : শিরোনামটি "মূল: http: // siteZ " বলে, কারণ এটি দেখতে পারে যে আপনি সাইটএ এবং সাইটজে! = SiteA এর জন্য অনুরোধ করছেন। (আপনি এটিকে থামাতে বা হস্তক্ষেপ করতে পারবেন না।)

2. MyCode.js এর প্রতিক্রিয়া শিরোনাম অ্যাক্সেস-কন্ট্রোল-অনুমতি-অরিজিন: http: // সাইট বি, যা আমি মনে করি তার মানে বোঝানো হয়েছে যে MyCode.js সাইট বিতে ক্রস-উত্স রেফারেন্স তৈরি করার অনুমতি দেওয়া হয়েছিল।

কোন। এর মানে হল, শুধুমাত্র সাইটবিকে এই অনুরোধটি করার অনুমতি দেওয়া হয়েছে। সাইট সাইট থেকে MyCode.js এর জন্য আপনার অনুরোধটি পরিবর্তে একটি ত্রুটি পায় এবং ব্রাউজার সাধারণত আপনাকে কিছুই দেয় না। কিন্তু আপনি যদি আপনার সার্ভার ACAO ফেরত দেন: পরিবর্তে সাইটজেড, আপনি MyCode.js পাবেন। অথবা যদি এটি '*' পাঠায়, এটি কাজ করবে, এটি সবাইকে সরিয়ে দেবে। অথবা সার্ভার সর্বদা মূল থেকে স্ট্রিং পাঠায়: হেডার ... কিন্তু ... নিরাপত্তার জন্য, যদি আপনি হ্যাকারদের ভয় পান , আপনার সার্ভারটি শুধুমাত্র একটি শর্টলিস্টে উত্সগুলিকে অনুমতি দেয়, যা সেই অনুরোধগুলি করার অনুমতি দেয়।

তারপর, MyCode.js সাইট এ থেকে আসে। যখন এটি সাইটবিকে অনুরোধ করে, তখন তারা সমস্ত ক্রস-উৎপত্তি হয়, ব্রাউজারটি মূলটি পাঠায়: সাইট এ এবং সাইটবিকে সাইটটি নিতে হবে, এটি অনুমোদিত অনুরোধকারীদের সংক্ষিপ্ত তালিকায় আছে এবং ACAO: siteA পাঠাও। শুধুমাত্র তখন ব্রাউজারটি আপনার স্ক্রিপ্টগুলিকে সেই অনুরোধগুলির ফলাফল পেতে দেবে।




প্রতিক্রিয়া এবং অ্যাক্সিয়াস ব্যবহার করে, ইউআরএল প্রক্সি লিংক যোগদান করুন এবং নীচের হিসাবে শিরোনাম যোগ করুন

https://cors-anywhere.herokuapp.com/ + Your API URL

শুধু প্রক্সি লিঙ্ক যোগ করে কাজ করবে, কিন্তু এটি আবার অ্যাক্সেসের জন্য ত্রুটি নিক্ষেপ করতে পারে। নীচে দেখানো হিসাবে শিরোনাম যোগ করার জন্য ভাল।

axios.get(`https://cors-anywhere.herokuapp.com/[YOUR_API_URL]`,{headers: {'Access-Control-Allow-Origin': '*'}})
      .then(response => console.log(response:data);
  }



যদি আপনি কেবল একটি ক্রস ডোমেন অ্যাপ্লিকেশন পরীক্ষা করতে চান যার মধ্যে ব্রাউজার আপনার অনুরোধটি ব্লক করে তবে আপনি কেবল আপনার ব্রাউজারটি অনিরাপদ মোডে খুলতে পারেন এবং আপনার কোডটি পরিবর্তন না করে এবং আপনার কোডটি অনিরাপদ করেই আপনার অ্যাপ্লিকেশনটি পরীক্ষা করতে পারেন। ম্যাক অপারেটিং সিস্টেম থেকে আপনি টার্মিনাল লাইন থেকে এটি করতে পারেন:

open -a Google\ Chrome --args --disable-web-security --user-data-dir



আপনি যদি পিএইচপি ব্যবহার করেন, তবে পিএইচপি ফাইলের বীন্যিংয়ে নিম্নলিখিত কোডটি যুক্ত করার চেষ্টা করুন:

যদি আপনি স্থানীয় হোস্ট ব্যবহার করেন, তবে এটি চেষ্টা করুন:

header("Access-Control-Allow-Origin: *");

যদি আপনি সার্ভারের মতো বহিরাগত ডোমেন ব্যবহার করেন তবে এটি চেষ্টা করুন:

header("Access-Control-Allow-Origin: http://www.website.com");



ক্রস-অরিজিন অনুরোধ ভাগ করা - CORS (AKA ক্রস-ডোমেন AJAX অনুরোধ) একটি সমস্যা যা বেশিরভাগ ওয়েব ডেভেলপারদের সম্মুখীন হতে পারে, একই-মূল-নীতি অনুসারে ব্রাউজারগুলি একটি সুরক্ষা স্যান্ডবক্সে ক্লায়েন্ট জাভাস্ক্রিপ্টকে সীমাবদ্ধ করে, সাধারণত JS দূরবর্তী কোনো দূরবর্তী যোগাযোগের সাথে যোগাযোগ করতে পারে না একটি ভিন্ন ডোমেন থেকে সার্ভার। অতীতের বিকাশকারীরা ক্রস-ডোমেন রিসোর্স অনুরোধটি অর্জনের অনেক জটিল উপায় তৈরি করেছেন, বেশিরভাগ ক্ষেত্রেই এটি ব্যবহার করা হয়:

  1. রিমোট / সিলভারলাইট বা সার্ভারের পাশটিকে দূরবর্তী সঙ্গে যোগাযোগ করতে "প্রক্সি" হিসাবে ব্যবহার করুন।
  2. প্যাডিং সহ JSON ( JSONP )।
  3. একটি আইফ্রেমে রিমোট সার্ভার এম্বেড করে এবং বিভাজক বা window.name এর মাধ্যমে যোগাযোগ করে, here পড়ুন।

এই চতুর পদ্ধতিগুলিতে কম বা কিছু সমস্যা রয়েছে, উদাহরণস্বরূপ, JSONP যদি সুরক্ষাগুলি সহজে "eval" করে এবং এটি উপরে # 3 উপরে সুরক্ষার গহ্বর হতে পারে তবে এটি ডোমেনগুলি একে অপরের মধ্যে কঠোর চুক্তি তৈরি করতে পারে, এটি নমনীয় না মার্জিত এই প্রোগ্রামটিতে :)

W3C ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) একটি নিরাপদ, নমনীয় এবং এই সমস্যার সমাধান করার প্রস্তাবিত আদর্শ উপায় সরবরাহ করার জন্য একটি আদর্শ সমাধান হিসাবে চালু করেছে।

প্রক্রিয়া

একটি উচ্চ স্তরের থেকে আমরা কেবলমাত্র CORS ডোমেন A থেকে ক্লায়েন্ট AJAX কল এবং ডোমেন B এ হোস্ট করা একটি পৃষ্ঠার মধ্যে চুক্তিটি স্বীকার করতে পারি, একটি সাধারণ ক্রস-মূল অনুরোধ / প্রতিক্রিয়া হবে:

ডোমেইন এ AJAX অনুরোধ শিরোনাম

Host DomainB.com
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language en-us;
Accept-Encoding gzip, deflate
Keep-Alive 115
Origin http://DomainA.com 

ডোমেইনবি প্রতিক্রিয়া শিরোনাম

Cache-Control private
Content-Type application/json; charset=utf-8
Access-Control-Allow-Origin DomainA.com
Content-Length 87
Proxy-Connection Keep-Alive
Connection Keep-Alive

উপরে বর্ণিত নীল অংশগুলি কার্নেলের ঘটনা, "মূল" অনুরোধের শিরোনাম "নির্দেশ করে যে ক্রস-উৎপত্তি অনুরোধ বা প্রফ্লাইট অনুরোধটি কীভাবে উদ্ভূত হয়", "অ্যাক্সেস-কন্ট্রোল-অনুমতি-মূল-মূল" প্রতিক্রিয়া শিরোনাম নির্দেশ করে যে এই পৃষ্ঠাটি থেকে দূরবর্তী অনুরোধের অনুমতি দেয় ডোমেনএ (মানটি যদি * নির্দেশক কোন ডোমেন থেকে দূরবর্তী অনুরোধের অনুমতি দেয়)।

আমি উপরে উল্লিখিত হিসাবে, W3 প্রকৃতপক্ষে ক্রস-মূল HTTP অনুরোধ জমা দেওয়ার আগে একটি "প্রিফ্লাইট অনুরোধ " বাস্তবায়ন করার জন্য ব্রাউজারকে প্রস্তাবিত করে, এটি একটি HTTP OPTIONS অনুরোধের সংক্ষেপে:

OPTIONS DomainB.com/foo.aspx HTTP/1.1

যদি foo.aspx OPTIONS HTTP ক্রিয়া সমর্থন করে তবে এটি নীচের মত প্রতিক্রিয়া ফিরিয়ে দিতে পারে:

HTTP/1.1 200 OK
Date: Wed, 01 Mar 2011 15:38:19 GMT
Access-Control-Allow-Origin: http://DomainA.com
Access-Control-Allow-Methods: POST, GET, OPTIONS, HEAD
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Max-Age: 1728000
Connection: Keep-Alive
Content-Type: application/json

শুধুমাত্র প্রতিক্রিয়াটিতে যদি "অ্যাক্সেস-কন্ট্রোল-অনুমতি-অরিজিন" থাকে এবং এটির মানটি "*" বা "COORS অনুরোধটি জমা দেওয়ার ডোমেন ধারণ করে তবে এই বাধ্যতামূলক শর্তটি সন্তুষ্ট করে ব্রাউজার প্রকৃত ক্রস ডোমেন অনুরোধ জমা দেবে এবং ফলাফলটি ক্যাশে করবে " Preflight- ফলাফল-ক্যাশে "।

আমি তিন বছর আগে CORS সম্পর্কে ব্লগ করেছি: AJAX ক্রস-মূল HTTP অনুরোধ




যখনই আমি CORS সম্পর্কে ভাবতে শুরু করি, আমার অন্তর্দৃষ্টিটি কোন সাইটের শিরোনাম হোস্ট করে সেটি ভুল, ঠিক যেমন আপনি আপনার প্রশ্নের বর্ণনা দিয়েছেন। আমার জন্য, এটি একই মূল নীতির উদ্দেশ্য সম্পর্কে চিন্তা করতে সহায়তা করে।

একই মূল নীতিটির উদ্দেশ্য হল সাইট A.com এ দূষিত জাভাস্ক্রিপ্ট থেকে আপনি কেবলমাত্র সাইটবোটের সাথে ভাগ করে নেওয়ার জন্য যে ব্যক্তিগত তথ্যটি চয়ন করেছেন সেটি অ্যাক্সেস করার জন্য। একই মূল নীতি ছাড়া, সাইট A.com এর লেখকদের দ্বারা লিখিত জাভাস্ক্রিপ্ট siteB.com এর জন্য আপনার প্রমাণীকরণ কুকি ব্যবহার করে সাইটবটমে অনুরোধ করতে পারে। এইভাবে, siteA.com সাইটB.com এর সাথে ভাগ করা গোপন তথ্য চুরি করতে পারে।

কখনও কখনও আপনাকে অবশ্যই ক্রস ডোমেনটি কাজ করতে হবে, যেখানে CORS আসে। CORS ডোমেন A.com এর জন্য একই মূল নীতিটি শিথিল করে, Access-Control-Allow-Origin শিরোনামটি ব্যবহার করে অন্য ডোমেনগুলি (ডোমেনবোট) যেগুলি চালানোর জন্য বিশ্বস্ত ডোমেন A.com সঙ্গে যোগাযোগ করতে পারেন যে জাভাস্ক্রিপ্ট।

বোঝার জন্য কোন ডোমেনটি CORS হেডারগুলি পরিবেশন করা উচিত তা বিবেচনা করুন। আপনি malicious.com এ যান, যা কিছু জাভাস্ক্রিপ্ট রয়েছে যা mybank.com এ ক্রস ডোমেন অনুরোধ করার চেষ্টা করে। এটা mybank.com নয়, malicious.com নয়, এটি CORS হেডার সেট করে কিনা তা নির্ধারণ করার জন্য, একই মূল নীতিটিকে জাভাস্ক্রিপ্ট থেকে malicious.com এর সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেয় কিনা তা নির্ধারণ করতে হবে। Malicous.com যদি নিজের নিজের জাভাস্ক্রিপ্ট অ্যাক্সেসটি mybank.com এ অ্যাক্সেসের অনুমতি দেয় তবে এটি নিজের মূল CORS হেডার সেট করতে পারে, এটি সম্পূর্ণভাবে একই মূল নীতিটিকে বাতিল করে দেবে।

আমি মনে করি আমার খারাপ অন্তর্দৃষ্টিটির কারণটি এমন একটি দৃষ্টিকোণ যা আমার কাছে একটি সাইট তৈরির সময়। এটি আমার সাইট, আমার সমস্ত জাভাস্ক্রিপ্টের সাথে, তাই এটি দূষিত কিছু করছে না এবং আমার জাভাস্ক্রিপ্ট কোনও সাইটগুলির সাথে যোগাযোগ করতে পারে তা নির্দিষ্ট করার জন্য এটি আমার কাছে থাকা উচিত। আসলে যখন আমার মনে হয় যে কোন সাইটগুলি জাভাস্ক্রিপ্ট আমার সাইটের সাথে যোগাযোগ করার চেষ্টা করছে এবং আমি তাদের অনুমতি দেওয়ার জন্য CORS ব্যবহার করব?




ক্রস উত্স ভাগ করার জন্য, সেট হেডার: 'Access-Control-Allow-Origin':'*';

Php: header('Access-Control-Allow-Origin':'*');

নোড: app.use('Access-Control-Allow-Origin':'*');

এটি বিভিন্ন ডোমেনের জন্য সামগ্রী ভাগ করার অনুমতি দেবে।




Access-Control-Allow-Origin মূলটি একটি CORS (ক্রস-অরিজিন রিসোর্স ভাগ করা) শিরোনাম

যখন সাইট এ সাইট বি থেকে সামগ্রী আনতে চেষ্টা করে, তখন সাইট B Access-Control-Allow-Origin প্রতিক্রিয়া শিরোনাম ব্রাউজারকে জানাতে পারে যে এই পৃষ্ঠাটির সামগ্রী নির্দিষ্ট উত্সগুলিতে অ্যাক্সেসযোগ্য। (একটি উত্স একটি ডোমেন, প্লাস একটি স্কিম এবং পোর্ট নম্বর ।) ডিফল্টরূপে, সাইট বি এর পৃষ্ঠাগুলি অন্য কোনও উত্স থেকে অ্যাক্সেসযোগ্য নয় ; Access-Control-Allow-Origin হেডার ব্যবহার করে নির্দিষ্ট অনুরোধ উত্স দ্বারা ক্রস-মূল অ্যাক্সেসের জন্য একটি দরজা খোলে।

সাইট A তে অ্যাক্সেসযোগ্য করতে প্রতিটি সাইটের / পৃষ্ঠার জন্য, সাইটের B প্রতিক্রিয়া শিরোনামের সাথে তার পৃষ্ঠাগুলি পরিবেশন করা উচিত:

Access-Control-Allow-Origin: http://siteA.com

আধুনিক ব্রাউজারগুলি ক্রস-ডোমেন অনুরোধগুলি সরাসরি অবরোধ করবে না। যদি সাইট এ সাইট বি থেকে একটি পৃষ্ঠা অনুরোধ করে তবে ব্রাউজারটি প্রকৃতপক্ষে অনুরোধকৃত পৃষ্ঠাটি নেটওয়ার্ক স্তরে আনবে এবং প্রতিক্রিয়া শিরোনামগুলি সাইট A কে একটি অনুমোদিত অনুরোধকারী ডোমেন হিসাবে তালিকাভুক্ত করবে কিনা তা পরীক্ষা করে দেখুন। যদি সাইট বি নির্দেশ করে না যে সাইট এটিকে এই পৃষ্ঠাটি অ্যাক্সেস করার অনুমতি দেওয়া হয়েছে তবে ব্রাউজারটি XMLHttpRequest এর error ইভেন্টটি ট্রিগার করবে এবং জাভাস্ক্রিপ্ট কোডের প্রতিক্রিয়া ডেটা অস্বীকার করবে।

অ-সাধারণ অনুরোধ

নেটওয়ার্ক স্তরের উপর কি ঘটছে উপরে ব্যাখ্যা তুলনায় সামান্য আরো জটিল হতে পারে। অনুরোধটি একটি "অ-সরল" অনুরোধ , তবে ব্রাউজার প্রথমে ডেটা-কম "preflight" বিকল্প অনুরোধ প্রেরণ করে, সার্ভার অনুরোধটি স্বীকার করবে তা যাচাই করতে। একটি অনুরোধ (বা উভয়) যখন অ-সহজ হয়:

  • GET বা POST ছাড়া অন্য একটি HTTP ক্রিয়া ব্যবহার করে (উদাহরণস্বরূপ, মুছে ফেলুন)
  • অ সাধারণ অনুরোধ শিরোনাম ব্যবহার করে; শুধুমাত্র সাধারণ অনুরোধ শিরোনাম হয়:
    • Accept
    • Accept-Language
    • Content-Language
    • Content-Type (এটি কেবল তখনই সহজ যখন এটির মানটি application/x-www-form-urlencoded , multipart/form-data , বা text/plain )

যদি সার্ভার যথাযথ প্রতিক্রিয়া শিরোনামের সাথে OPTIONS প্রফ্লিটের প্রতিক্রিয়া জানায় (অ-সরল শিরোলেখগুলির Access-Control-Allow-Methods হেডারগুলি, অ-সরল ক্রিয়াগুলির জন্য Access-Control-Allow-Methods ) যা অ-সরল ক্রিয়া এবং / অথবা অ -সম্পূর্ণ শিরোনাম, তারপর ব্রাউজার প্রকৃত অনুরোধ পাঠায়।

অনুমান করা হচ্ছে যে সাইট A /somePage জন্য একটি PUT অনুরোধ পাঠাতে চায়, কোনও সাধারণ Content-Type মান application/json , ব্রাউজার প্রথমে প্রিফ্লাইট অনুরোধ পাঠাবে:

OPTIONS /somePage HTTP/1.1
Origin: http://siteA.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: Content-Type

উল্লেখ্য যে Access-Control-Request-Method এবং Access-Control-Request-Headers স্বয়ংক্রিয়ভাবে ব্রাউজার দ্বারা যুক্ত করা হয়; আপনি তাদের যোগ করার প্রয়োজন হয় না। এই বিকল্পগুলি preflight সফল প্রতিক্রিয়া শিরোনাম পায়:

Access-Control-Allow-Origin: http://siteA.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type

প্রকৃত অনুরোধ পাঠানোর সময় (প্রিফ্লাইট সম্পন্ন হওয়ার পরে), আচরণটি কীভাবে সহজ অনুরোধ পরিচালিত হয় তার অনুরূপ। অন্য কথায়, একটি অন-সাধারণ অনুরোধ যার প্রিফ্লাইটটি সফল হয় সেটি সাধারণ অনুরোধের মতো একই আচরণ করা হয় (অর্থাৎ, সার্ভার অবশ্যই Access-Control-Allow-Origin প্রকৃত প্রতিক্রিয়ার জন্য আবার পাঠাতে হবে)।

ব্রাউজার প্রকৃত অনুরোধ পাঠায়:

PUT /somePage HTTP/1.1
Origin: http://siteA.com
Content-Type: application/json

{ "myRequestContent": "JSON is so great" }

এবং সার্ভার একটি Access-Control-Allow-Origin পাঠায়, ঠিক যেমন এটি একটি সহজ অনুরোধের জন্য:

Access-Control-Allow-Origin: http://siteA.com

অ-সাধারণ অনুরোধ সম্পর্কে আরও কিছু তথ্যের জন্য CORS এর উপর XMLHttpRequest বোঝা দেখুন।




আপনি যদি রিস্ট API এর জন্য জার্সি ব্যবহার করেন তবে আপনি নীচের মতো করতে পারেন

আপনি আপনার webservices বাস্তবায়ন পরিবর্তন করতে হবে না।

আমি জার্সি 2.x জন্য ব্যাখ্যা করবে

1) প্রথমে নীচে প্রদর্শিত হিসাবে একটি ResponseFilter যোগ করুন

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;

public class CorsResponseFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext,   ContainerResponseContext responseContext)
    throws IOException {
        responseContext.getHeaders().add("Access-Control-Allow-Origin","*");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");

  }
}

2) তারপর web.xml, জার্সি servlet ঘোষণা মধ্যে নীচের যোগ করুন

    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>YOUR PACKAGE.CorsResponseFilter</param-value>
    </init-param>






javascript cross-domain cors