অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স শিরোনাম কীভাবে কাজ করে?


1152

স্পষ্টতই, আমি এর শব্দার্থবিজ্ঞানের সম্পূর্ণ ভুল বুঝেছি। আমি এরকম কিছু ভেবেছিলাম:

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

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

একটি জিনিস নিশ্চিত - আমি এখনও এই হেডারটি ব্যবহার করার কথা বলি না কেন বুঝতে পারি না।

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

পুনশ্চ

আমি জেএসএনপি ব্যবহার করতে চাই না।


3
আমি নিশ্চিত নই, তবে আমি বিশ্বাস করি যে এইভাবে শিরোনামটি সেট করা বি সাইটের বিটিতে কোড আনতে দেয় http://siteA/MyCode.js
pimvdb

6
কিন্তু কিভাবে??? শিরোনামের মান পাওয়ার জন্য প্রথমে প্রথমে সংস্থানটি আনতে হবে তবে সংস্থানটি ক্রস-অরিজিন এবং তাই ব্রাউজারটি কি প্রথমে অনুরোধটি ব্লক করা উচিত নয়?
চিহ্নিত করুন

আপনি যা বর্ণনা করেছেন তা আসলে অন্য একটি অনুশীলনের সাথে মিলে যায়, সামগ্রী সুরক্ষা নীতি
অ্যালেক্স

3
@ চিহ্ন আপনাকে শিরোনামগুলি পেতে রিসোর্সটি আনতে হবে না। এইচটিটিপি হেডার পদ্ধতিটি কেবলমাত্র শিরোনামে ফিরে আসবে। এবং সিওআরএসের ক্ষেত্রে, এইচটিটিপি অপশন পদ্ধতি ব্যবহার করে একটি প্রিফলাইট চেক করা হয় যা দেহে ফিরে আসে না। apsillers উত্তর এই চমত্কারভাবে বর্ণনা stackoverflow.com/posts/10636765/revisions
ম্যাথু

উত্তর:


1444

Access-Control-Allow-Originএকটি কর্স (ক্রস-অরিজিন রিসোর্স ভাগ করে নেওয়া) শিরোনাম

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

যে সাইটটি বি সাইট এ এর ​​অ্যাক্সেসযোগ্য করতে চায় প্রতিটি সংস্থান / পৃষ্ঠার জন্য সাইট বি এর পৃষ্ঠাগুলি প্রতিক্রিয়া শিরোনাম সহ পরিবেশন করবে:

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

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

অ-সরল অনুরোধ

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

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

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

ধরা যাক যে সাইট এ এর ​​জন্য একটি পিট অনুরোধটি প্রেরণ করতে চাইছে /somePage, এর একটি সাধারণ-সাধারণ 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স্বয়ংক্রিয়ভাবে ব্রাউজার দ্বারা যুক্ত করা হয়; আপনার এগুলি যুক্ত করার দরকার নেই। এই অপশনস প্রিফলাইটটি সফল প্রতিক্রিয়া শিরোনাম পেয়েছে:

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

সহজ-সরল অনুরোধগুলি সম্পর্কে আরও কিছু তথ্যের জন্য সিওআরএসের উপরে এক্সএমএলএইচটিপি অনুরোধটি বোঝা দেখুন ।


4
তবে মাইকোড.জেএস প্রথম স্থান बी এর জন্য পৌঁছাতে পারে না! এই শিরোনাম কীভাবে ক্লায়েন্টের কাছে আসবে? বিটিডাব্লু, অবতারে হালকা লাইফ গ্লাইডারের জন্য কুদোস।
চিহ্নিত করুন

8
আমি স্পষ্টতার সাথে সম্পাদনা করেছি: ব্রাউজারটি আসলে শিরোনামটি যাচাই করতে সাইট বিতে একটি নেটওয়ার্ক আনতে সঞ্চালন করে Access-Control-Allow-Origin, তবে শিরোনাম যদি এটিকে সাইট এটির অনুমতি না দেয় তবে এটি সাইট এ তে জেএস কোডটির প্রতিক্রিয়া সরবরাহ করতে পারে না। (পিএস ধন্যবাদ :))
অ্যাপসিলাররা

2
ক্রস-অরিজিনের অনুরোধ অনুমোদিত না হলে আমি ফিজল্ডারে ডাউনলোডের কোনও রেকর্ড দেখতে পাচ্ছি না। আকর্ষণীয় ...
চিহ্নিত করুন;

23
@ জওয়ান 22২২ একটি মৌলিক " কেন? " এর মতো প্রশ্ন সম্ভবত এই নির্দিষ্ট উত্তরের জন্য সুযোগের বাইরে, যা কেবল নিয়ম এবং যান্ত্রিকতার বিষয়ে। মূলত, ব্রাউজারটি আপনাকে , কম্পিউটারে বসে থাকা মানুষের, যে কোনও উত্স থেকে কোনও সংস্থান দেখতে দেয়। এটি স্ক্রিপ্টগুলি (যা যে কারও দ্বারা লেখা হতে পারে) উত্স থেকে প্রাপ্ত রিসোর্সগুলি থেকে স্ক্রিপ্টগুলি চলমান পৃষ্ঠার উত্স থেকে পৃথক নয়। কিছু সংশ্লিষ্ট প্রশ্ন আছে programmers.stackexchange.com/q/216605 এবং একই উৎপত্তি নীতির জন্য হুমকি মডেল কি?
অ্যাপসিলাররা 12:55

3
কোনও প্রমাণীকরণ ব্যবহারের ক্ষেত্রে, কিছু ব্রাউজারগুলিতে (এফএফ এবং ক্রোম এএফআইকে) Access-Control-Allow-Originগ্রহণ করে না *। সুতরাং এই ক্ষেত্রে আপনাকে Originশিরোলেখ থেকে মান নির্দিষ্ট করতে হবে । আশা করি এটি কারও সাহায্য করবে।
Zsolti

123

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

  1. দূরবর্তী সাথে যোগাযোগের জন্য "প্রক্সি" হিসাবে ফ্ল্যাশ / সিলভারলাইট বা সার্ভার সাইডটি ব্যবহার করুন।
  2. জেএসএন উইথ প্যাডিং ( জেএসএনপি )।
  3. একটি iframe এ রিমোট সার্ভার এম্বেড করে এবং খণ্ড বা উইন্ডো.নামের মাধ্যমে যোগাযোগ করে, এখানে উল্লেখ করুন

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

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

মেকানিজম

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

ডোমেনা এজেএক্স অনুরোধ শিরোনাম

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

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

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

OPTIONS DomainB.com/foo.aspx HTTP/1.1

Foo.aspx অপশন 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

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

আমি তিন বছর আগে CORS সম্পর্কে ব্লগ করেছি: এজ্যাক্স ক্রস-অরিজিন এইচটিটিপি অনুরোধ


এই উত্তরটি আমাকে বুঝতে পেরেছিল যে কেন আমি হঠাৎ পোষ্ট এবং জিইটি অনুরোধগুলির জন্য এই শিরোনামটি ব্যবহার না করেই একটি সমস্যা পাচ্ছি। আমি ঘটনাক্রমে সরাসরি ডিস্ক থেকে সূচক। Html ফাইলটি খুললাম, সুতরাং ক্লায়েন্টটি নোড.জেজে যে URL টি অ্যাক্সেস করছিল তা ক্রস-ডোমেন বলে মনে করা হত, যখন এটি কেবল লোকালহোস্টে চলছিল। ইউআরএল মাধ্যমে অ্যাক্সেস করা (যেমনটি সাধারণত একটি হিসাবে করা হয়) আমার সমস্যাটিকে "সমাধান" করেছে ...
লকজেনসেন

কোনও বাহ্যিক নেটওয়ার্কের কোনও ডোমেন কোনও অভ্যন্তরীণ নেটওয়ার্কে কোনও ডোমেনের সাথে যোগাযোগ করতে সক্ষম হবে?
সি 8

68

উত্তর দেওয়ার জন্য প্রশ্নটি কিছুটা পুরানো, তবে এই প্রশ্নের ভবিষ্যতের কোনও রেফারেন্সের জন্য আমি এটি পোস্ট করছি।

মতে এই মজিলা ডেভেলপার নেটওয়ার্ক প্রবন্ধ,

একটি সম্পদ একটি তোলে ক্রশ-অরিজিন HTTP অনুরোধ যখন এটি একটি আলাদা ডোমেন, বা এক যা প্রথম নিজে নিজেই সম্পদ তোলে চেয়ে বন্দর থেকে একটি সম্পদ অনুরোধ করেছে।

এখানে চিত্র বর্ণনা লিখুন

একটি HTML পৃষ্ঠার থেকে পরিবেশিত http://domain-a.comএকটি তোলে <img>জন্য src অনুরোধ http://domain-b.com/image.jpg
ওয়েবে আজকের অনেক পৃষ্ঠাগুলি পৃথক ডোমেনগুলি থেকে সিএসএস স্টাইলশীট , চিত্র এবং স্ক্রিপ্টগুলির মতো সংস্থানগুলি লোড করে (সুতরাং এটি দুর্দান্ত হওয়া উচিত)।

একই উত্স নীতি

সুরক্ষার কারণে ব্রাউজারগুলি স্ক্রিপ্টগুলির মধ্যে থেকে শুরু করা ক্রস-অরিজিন HTTP অনুরোধগুলি সীমাবদ্ধ করে । উদাহরণস্বরূপ, এবং একই-উত্স নীতি অনুসরণ করুন । সুতরাং, একটি ওয়েব অ্যাপ্লিকেশন ব্যবহার করে বা শুধুমাত্র বানাতে পারে অনুরোধ HTTP- র থেকে নিজস্ব ডোমেইন
XMLHttpRequestFetch
XMLHttpRequestFetch

ক্রস-অরিজিন রিসোর্স শেয়ারিং (সিওআরএস)

ওয়েব অ্যাপ্লিকেশনগুলির উন্নতি করতে, বিকাশকারীরা ব্রাউজার বিক্রেতাদের ক্রস-ডোমেন অনুরোধের অনুমতি দিতে বলেছিল।

ক্রশ-অরিজিন রিসোর্স শেয়ারিং (CORS) প্রক্রিয়া ওয়েব সার্ভার দেয় ক্রস ডোমেইন প্রবেশাধিকার নিয়ন্ত্রণ , যা নিরাপদ ক্রস ডোমেইন বা ডেটা স্থানান্তর সক্রিয় করুন।
আধুনিক ব্রাউজার ব্যবহার CORS একটি ইন এপিআই ধারক যেমন - XMLHttpRequestবা Fetch- ক্রশ-অরিজিন HTTP অনুরোধ ঝুঁকি প্রশমিত।

CORS কীভাবে কাজ করে ( Access-Control-Allow-Originশিরোনাম)

উইকিপিডিয়া :

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

যদিও কিছু বৈধতা এবং অনুমোদন সার্ভার দ্বারা সম্পাদন করা যেতে পারে, তবে সাধারণত এই শিরোলেখকে সমর্থন করা এবং তারা আরোপিত বিধিনিষেধকে সম্মান জানানো ব্রাউজারের দায়িত্ব

উদাহরণ

  1. ব্রাউজারটি OPTIONSএকটি Origin HTTPশিরোলেখ দিয়ে অনুরোধ প্রেরণ করে ।

    এই শিরোনামটির মান হ'ল ডোমেন যা প্যারেন্ট পৃষ্ঠাকে পরিবেশন করেছে। যখন কোনও পৃষ্ঠা http://www.example.comকোনও ব্যবহারকারীর ডেটা অ্যাক্সেস করার চেষ্টা করে service.example.com, নিম্নলিখিত অনুরোধ শিরোনাম এতে পাঠানো হবে service.example.com:

    উত্স: http://www.example.com

  2. সার্ভারটি এতে service.example.comপ্রতিক্রিয়া জানাতে পারে:

    • Access-Control-Allow-Originএর প্রতিক্রিয়ায় একটি (এসিএও) শিরোনামটি নির্দেশ করে যে কোন মূল সাইটগুলি অনুমোদিত।
      উদাহরণ স্বরূপ:

      Access-Control-Allow-Origin: http://www.example.com

    • সার্ভার ক্রস-আর্জি অনুরোধের অনুমতি না দিলে একটি ত্রুটি পৃষ্ঠা

    • একটি Access-Control-Allow-Originএকটি ওয়াইল্ড কার্ড দিয়ে (ACAO) শিরোনাম সব ডোমেনে অনুমতি দেয়:

      Access-Control-Allow-Origin: *


1
কোনওটি কীভাবে সেট করবেন সেটিকে কিছু নমন করার অনুমতি নেইAccess-Control-Allow-Origin:null
সাবিন চালিল

2
আমি যখন কাউকে সিআরএস এর মাধ্যমে আমার সংস্থানগুলিতে অ্যাক্সেস করার অনুমতি দিতে চাই না তখন আমার কোন মূল্য নির্ধারণ করা উচিত Access-Control-Allow-Origin? আমার Access-Control-Allow-Origin: *
উপকারের

4
কেবল সেই উদ্দেশ্যে কোনও কিছু সেট করুন না
Pmpr

24

যখনই আমি সিওআরএস সম্পর্কে চিন্তাভাবনা শুরু করি, কোন প্রশ্নে শিরোনামগুলি হোস্ট করে সে সম্পর্কে আমার স্বজ্ঞাততা ভুল, যেমনটি আপনি আপনার প্রশ্নে বর্ণনা করেছেন। আমার জন্য, এটি একই উত্স নীতিটির উদ্দেশ্য সম্পর্কে চিন্তা করতে সহায়তা করে।

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

কখনও কখনও আপনার ক্রস ডোমেনের কাজ করা প্রয়োজন, যেখানে Access-Control-Allow-Originসিআরএস আসে। কম।

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

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


1
অনুচ্ছেদ 2 দেওয়া, আপনি অনুচ্ছেদ 3 এ সাইটএ, সাইটবি পিছনের দিকে? আমার ভুল বোঝাবুঝি হতে পারে তবে আগের অনুচ্ছেদে এর সাইটএ বোঝা যাচ্ছে যা প্রশ্নে জেএস চালাচ্ছে?
cellepo

11

1. কোনও ক্লায়েন্ট জাভাস্ক্রিপ্ট কোড মাইকোড.জেএস ডাউনলোড করুন http: // সাইটএ থেকে - মূল।

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

২. মাইকোড.জেএস এর প্রতিক্রিয়া শিরোনামে অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স রয়েছে: HTTP: // সাইটবি , যা আমি ভেবেছিলাম যে মাইকোড.জেসকে বি সাইটের বিপরীতে উত্স উল্লেখ করার অনুমতি দেওয়া হয়েছিল was

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

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


11

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

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);
  }

18
দয়া করে এটি করবেন না। প্রক্সি লিঙ্ক ব্যবহার করা ব্যবহারকারী কুকিজকে মধ্যবিত্তের হাতে দেওয়ার মতো। অবৈধ আইএমএইচও হওয়া উচিত
অ্যান্থনিমোনারি

এটি আমার জন্য দরকারী ছিল! * (যেটির সুরক্ষার সমস্যা রয়েছে) ব্যবহার না করে আমি আমার ঠিকানার ক্ষেত্রে ' reqres.in/api/register '
সি-নোট 187-তে জানার

9

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

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

9

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

যদি আপনি লোকালহোস্ট ব্যবহার করেন তবে এটি ব্যবহার করে দেখুন:

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

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

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

7

আমি এক্সপ্রেস 4 এবং নোড 7.4 এবং
কৌণিকের সাথে কাজ করি, এটির ক্ষেত্রে আমার একই সমস্যা হয়েছিল: ক) সার্ভার সাইড: ফাইল অ্যাপ.জেজে আমি সমস্ত প্রতিক্রিয়াতে শিরোনাম দিই:

app.use(function(req, res, next) {  
      res.header('Access-Control-Allow-Origin', req.headers.origin);
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
      next();
 });  

সমস্ত রাউটারের আগে এটি অবশ্যই থাকা উচিত
আমি এই শিরোলেখগুলিকে প্রচুর পরিমাণে যুক্ত দেখেছি:

res.header("Access-Control-Allow-Headers","*");
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');

তবে আমার এটির দরকার নেই,
খ) ক্লায়েন্ট সাইড: এজ্যাক্স প্রেরণে আপনার যুক্ত হওয়া দরকার: "উইথড্রেনডিয়েন্টালস: ট্রু," লাইক:

$http({
     method: 'POST',
     url: 'url, 
     withCredentials: true,
     data : {}
   }).then(function(response){
        // code  
   }, function (response) {
         // code 
   });

শুভকামনা


res.header('Access-Control-Allow-Origin', req.headers.origin);যেমনটি রয়েছেres.header('Access-Control-Allow-Origin', '*');
দ্য এফিলিন

4

ক্রস অরিজিন ভাগ করে নেওয়ার জন্য, শিরোনাম সেট করুন: 'Access-Control-Allow-Origin':'*';

পিএইচপি: header('Access-Control-Allow-Origin':'*');

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

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


4

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

ইনস্টল করার প্রক্রিয়া:

$ pip install -U flask-cors

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

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

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

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


4

আমার নিজের অভিজ্ঞতা থেকে, কেন কর্স এমনকি উদ্বেগ কেন তার সাধারণ ব্যাখ্যা পাওয়া শক্ত।

এটি কেন আছে তা একবার বুঝতে পারলে শিরোনাম এবং আলোচনা আরও পরিষ্কার হয়ে যায়। আমি কয়েক লাইনে শট দেব।


এটা সব কুকি সম্পর্কে। কুকিজ তাদের ডোমেন দ্বারা একটি ক্লায়েন্টে সংরক্ষণ করা হয়।

উদাহরণের গল্প: আপনার কম্পিউটারে একটি কুকি রয়েছে yourbank.com। হতে পারে আপনার সেশনটি সেখানে রয়েছে।

মূল বিষয়: যখন কোনও ক্লায়েন্ট সার্ভারে একটি অনুরোধ জানায়, এটি ক্লায়েন্টটি চালু আছে এমন ডোমেনের অধীনে থাকা কুকিজগুলি প্রেরণ করবে।

আপনি আপনার ব্রাউজারে লগ ইন করেছেন yourbank.com। আপনি আপনার সমস্ত অ্যাকাউন্ট দেখতে অনুরোধ। yourbank.comকুকিজের গাদা পায় এবং এর প্রতিক্রিয়া (আপনার অ্যাকাউন্টগুলি) ফেরত পাঠায়।

অন্য কোনও ক্লায়েন্ট যদি কোনও সার্ভারে ক্রস অরিজিনের অনুরোধ করে তবে সেই কুকিগুলি আগের মতোই প্রেরণ করা হবে। রুহ রোহ।

আপনি ব্রাউজ করুন malicious.com। ক্ষতিকারক বিভিন্ন ব্যাংকগুলিতে অনুরোধগুলির একটি গোছা করে yourbank.com

যেহেতু কুকিজ প্রত্যাশিত হিসাবে বৈধ হয়েছে, সার্ভার প্রতিক্রিয়া অনুমোদন করবে।

এই কুকিগুলি একত্রিত হয়ে বরাবর প্রেরণ হয়ে যায় - এবং এখন malicious.comথেকে এর প্রতিক্রিয়া রয়েছে yourbank

বাবা।


সুতরাং, এখন কয়েকটি প্রশ্নোত্তর সুস্পষ্ট হয়ে উঠেছে:

  • "আমরা কেবল ব্রাউজারটিকে তা করতে বাধা দিই না কেন?" হাঁ। CORS।
  • "আমরা কীভাবে এর আশেপাশে যাব?" সার্ভারের অনুরোধটি বলুন যে CORS ঠিক আছে।

3

কেবলমাত্র আপনার ওয়েব কোডফাইগ ফাইলে নিম্নলিখিত কোডটি পেস্ট করুন।

উল্লেখ্য যে, আপনাকে নিম্নলিখিত কোডটি <system.webServer>ট্যাগের আওতায় আনতে হবে

    <httpProtocol>  
    <customHeaders>  
     <add name="Access-Control-Allow-Origin" value="*" />  
     <add name="Access-Control-Allow-Headers" value="Content-Type" />  
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />  
    </customHeaders>  
  </httpProtocol>  

0

অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স প্রতিক্রিয়া শিরোনামটি নির্দেশিত কোডটি দিয়ে দেওয়া উত্স থেকে অনুরোধ কোডের সাথে ভাগ করা যায় কিনা তা নির্দেশ করে।

Header type Response       header
Forbidden header name      no

কোনও প্রতিক্রিয়া যা ব্রাউজারকে কোনও উত্স থেকে কোড কোনও সংস্থান অ্যাক্সেসের অনুমতি দেওয়ার জন্য বলে তা নিম্নলিখিত অন্তর্ভুক্ত করবে:

Access-Control-Allow-Origin: *

আরও তথ্যের জন্য, এখানে যান ...


0

এনগিনেক্স এবং অ্যাপাচি

অ্যাপসিলারদের উত্তর ছাড়াও আমি উইকি গ্রাফ যুক্ত করতে চাই যা দেখায় যখন অনুরোধটি সহজ হয় বা না (এবং অপশনগুলি পূর্ব-বিমানের অনুরোধ প্রেরণ করা হয় বা না)

এখানে চিত্র বিবরণ লিখুন

সহজ অনুরোধ (যেমন জন্য hotlinking ইমেজ ) আপনি আপনার সার্ভারে কনফিগারেশন ফাইল পরিবর্তন করতে হবে না, কিন্তু আপনি অ্যাপ্লিকেশানটিতে হেডার যোগ করতে পারেন তার মধ্যে মেলভিন গুয়েরো উল্লেখ মত (সার্ভার, যেমন পিএইচপি তে হোস্ট করা) উত্তর - কিন্তু মনে রাখবেন : আপনি যদি পূর্ণ যোগ আপনার সার্ভারে কনফিগারেশন (কনফিগারেশন) এবং একই সাথে আপনি অ্যাপ্লিকেশনে সরল করগুলি মঞ্জুরি দেন (যেমন পিএইচপি) এটি মোটেও কাজ করবে না।

এবং এখানে দুটি জনপ্রিয় সার্ভারের জন্য কনফিগারেশন রয়েছে

  • সিজিএস চালু করুন এনগিনেক্সে ( nginx.confফাইল)

  • অ্যাপাচি ( .htaccessফাইল) এ সিওআরএস চালু করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.