কেন একটি বিকল্প অনুরোধ পাঠানো হয়েছে এবং আমি কী এটি অক্ষম করতে পারি?


415

আমি একটি ওয়েব এপিআই তৈরি করছি। আমি যখনই খুঁজে পেয়েছি আমি যখনই ক্রোম পোস্ট করতে, আমার এপিআই তে পাই তখনই আসল অনুরোধের আগে সর্বদা একটি অপশন অনুরোধ পাঠানো হয় যা বেশ বিরক্তিকর। বর্তমানে আমি কোনও অপশন অনুরোধ অগ্রাহ্য করার জন্য সার্ভারটি পেয়েছি। এখন আমার প্রশ্নগুলি সার্ভারের বোঝা দ্বিগুণ করার জন্য একটি অপশন অনুরোধ প্রেরণে ভাল কি? অপশনের অনুরোধগুলি প্রেরণ করা থেকে ব্রাউজারকে পুরোপুরি বন্ধ করার কোনও উপায় আছে কি?

উত্তর:


376

2018-09-13 সম্পাদনা করুন : এই প্রাক-বিমানের অনুরোধ এবং কীভাবে এই পুনঃস্থাপনের শেষে এড়ানো যায় সে সম্পর্কে কিছু স্পষ্টতা যুক্ত করেছে।

OPTIONSঅনুরোধগুলিই আমরা pre-flightঅনুরোধগুলিতে কল করি Cross-origin resource sharing (CORS)

আপনি যখন নির্দিষ্ট পরিস্থিতিতে বিভিন্ন উত্স জুড়ে অনুরোধ করছেন তখন এগুলি প্রয়োজনীয়।

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

যখনই আপনি ক্রস অরিজিন অনুরোধগুলি করার চেষ্টা করছেন তখন আপনার সার্ভারকে এই অনুরোধগুলি উপেক্ষা করা উচিত নয় handle

একটি ভাল সংস্থান এখানে পাওয়া যাবে http://enable-cors.org/

আরামদায়ক হওয়ার জন্য এগুলি হ্যান্ডেল করার একটি উপায় হ'ল OPTIONSপদ্ধতিটি সহ যে কোনও পথের জন্য সার্ভার এই শিরোলেখের সাথে প্রতিক্রিয়া প্রেরণ করে তা নিশ্চিত করা

Access-Control-Allow-Origin: *

এটি ব্রাউজারকে বলবে যে সার্ভার যে কোনও উত্সের অনুরোধগুলির উত্তর দিতে রাজি।

আপনার সার্ভারে সিওআরএস সমর্থন কীভাবে যুক্ত করবেন সে সম্পর্কে আরও তথ্যের জন্য নীচের ফ্লোচার্টটি দেখুন

http://www.html5rocks.com/static/images/cors_server_flowchart.png

করস ফ্লোচার্ট


2018-09-13 সম্পাদনা করুন

সিডিআর OPTIONSঅনুরোধটি কেবলমাত্র কিছু ক্ষেত্রে ট্রিগার করা হয়, যেমন এমডিএন ডক্সে ব্যাখ্যা করা হয়েছে :

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

অনুমোদিত অনুমোদিত পদ্ধতিগুলি হ'ল:

  • পাওয়া
  • মস্তক
  • পোস্ট

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

  • গ্রহণ করা
  • স্বীকার করুন ভাষার
  • বিষয়বস্তু-ভাষা
  • সামগ্রী-প্রকার (তবে নীচে অতিরিক্ত প্রয়োজনীয়তা নোট করুন)
  • ডিপিআর
  • ডাউনলিংক
  • তথ্য সংরক্ষণ
  • ভিউপোর্ট-প্রস্থ
  • প্রস্থ

কন্টেন্ট-টাইপ শিরোলেখের জন্য একমাত্র অনুমোদিত মানগুলি:

  • আবেদন / এক্স-WWW-ফর্ম-urlencoded
  • একাধিক / ফর্ম-ডেটা
  • পাঠ্য / সাধারণ

অনুরোধে ব্যবহৃত কোনও এক্সএমএলএইচটিপিআরইউকুস্ট আপলোড আইটেমে কোনও শ্রোতা নিবন্ধভুক্ত নয়; এগুলি এক্সএমএলএইচটিপিআরকিউয়েস্ট.আপলোড সম্পত্তি ব্যবহার করে অ্যাক্সেস করা হয়।

অনুরোধে কোনও পঠনযোগ্য স্ট্রিম অবজেক্ট ব্যবহার করা হয়নি।


8
তবে সমস্ত সাধারণ ব্যবহারকারীর কাছে এই ক্রোম পতাকাটি সেট করা বাস্তবসম্মত নয়।
কিয়ান চেন

37
ক্রস অরিজিনের অনুরোধগুলি করার সময় প্রিফলাইট অনুরোধগুলি প্রয়োজন তা বলা ভুল। প্রিফলাইট অনুরোধগুলি কেবলমাত্র নির্দিষ্ট পরিস্থিতিতে প্রয়োজন যেমন আপনি যদি কাস্টম শিরোনাম সেট করে থাকেন, বা পেতে, মাথা এবং পোস্ট ব্যতীত অন্য কোনও অনুরোধ করছেন।
রবিন ক্লাওয়ার্স 27:58

4
মজাদারভাবে যথেষ্ট, jQuery ব্যবহার করে একটি সিওআরএস অনুরোধ করার সময়, জাভাস্ক্রিপ্ট লাইব্রেরি বিশেষত বিকাশকারীদের সতর্কতার শব্দ সহ কাস্টম শিরোনাম সেট করা এড়িয়ে চলে: ক্রস-ডোমেন অনুরোধগুলির জন্য, প্রিফলাইটের শর্তগুলি জিগস ধাঁধার মতই, এটি নিশ্চিত হতে কখনও সেট করুন না।
রাডার নীচে

3
আমি যদি curlএপিআই-র সাথে এটি করতে পারি তবে কীভাবে আসে তবে ক্রোম থেকে চালানোর সময় আমি ত্রুটিটি পাই?
সুপারউবারডুপার

5
@ সুপারউবারডুপার কারণ সিওআরএস এবং প্রিফলাইট অনুরোধগুলি ব্রাউজার সম্পর্কিত বিষয়। Originঅনুরোধটি কোনও নির্দিষ্ট হোস্টের (যেমন আপনার ওয়েলসাইট ডটকম) থেকে আসছে বলে অনুকরণ করার জন্য আপনার অনুরোধটিতে শিরোনাম যুক্ত করে আপনি সিআরএস অনুকরণ করতে পারেন । আপনি অনুরোধের এইচটিটিপি পদ্ধতি OPTIONSএবং Access-Control-*শিরোলেখগুলি নির্ধারণ করে প্রিফলাইট অনুরোধগুলিও অনুকরণ করতে পারেন
লিও কোরিয়া

234

এই ইস্যুটির মধ্যে দিয়ে গেছেন, নীচে এই ইস্যুতে আমার উপসংহার এবং আমার সমাধান।

সিওআরএস কৌশল অনুসারে (আপনি এটি সম্পর্কে উচ্চারণের জন্য আপনাকে সুপারিশ করুন) আপনি কেবল ব্রাউজারকে অপশন অনুরোধ প্রেরণ বন্ধ করতে বাধ্য করতে পারবেন না যদি মনে হয় এটি প্রয়োজন হয়।

আপনি এটি চারপাশে কাজ করতে পারেন দুটি উপায়:

  1. আপনার অনুরোধটি একটি "সাধারণ অনুরোধ" তা নিশ্চিত করুন
  2. Access-Control-Max-Ageবিকল্পের অনুরোধের জন্য সেট করুন

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

একটি সাধারণ ক্রস-সাইট অনুরোধ হ'ল যা নিম্নলিখিত সমস্ত শর্ত পূরণ করে:

অনুমোদিত অনুমোদিত পদ্ধতিগুলি হ'ল:

  • পাওয়া
  • মস্তক
  • পোস্ট

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

  • গ্রহণ করা
  • স্বীকার করুন ভাষার
  • বিষয়বস্তু-ভাষা
  • বিষয়বস্তুর প্রকার

কন্টেন্ট-টাইপ শিরোলেখের জন্য একমাত্র অনুমোদিত মানগুলি:

  • আবেদন / এক্স-WWW-ফর্ম-urlencoded
  • একাধিক / ফর্ম-ডেটা
  • পাঠ্য / সাধারণ

একটি সাধারণ অনুরোধের কারণে প্রাক-বিমানের বিকল্পগুলির অনুরোধ তৈরি হবে না।

বিকল্প চেকের জন্য একটি ক্যাশে সেট করুন

আপনি Access-Control-Max-Ageবিকল্পগুলির অনুরোধের জন্য একটি সেট করতে পারেন , যাতে এটির মেয়াদ শেষ না হওয়া পর্যন্ত এটি আবার অনুমতি পরীক্ষা করে না।

অ্যাক্সেস-কন্ট্রোল-ম্যাক্স-এজ সেকেন্ডের মধ্যে মান দেয় যে প্রিফলাইট অনুরোধটির প্রতিক্রিয়া আর কোনও প্রিফলাইট অনুরোধ না প্রেরণে ক্যাচ করা যায়।

সীমাবদ্ধতা লক্ষণীয়

  • ক্রোমের জন্য , ক্রোম উত্স কোড অনুসারে সর্বোচ্চ সেকেন্ড 10 মিনিটের জন্য Access-Control-Max-Ageis600
  • Access-Control-Max-Ageপ্রতিবার কেবলমাত্র একটি সংস্থান হিসাবে কাজ করে, উদাহরণস্বরূপ, GETএকই ইউআরএল পাথের সাথে অনুরোধগুলি রয়েছে তবে বিভিন্ন কোয়েরিকে বিভিন্ন সংস্থান হিসাবে বিবেচনা করা হবে। সুতরাং দ্বিতীয় উত্সের অনুরোধটি একটি প্রিফলাইট অনুরোধটি এখনও ট্রিগার করবে।

3
হ্যাঁ ... এটি গ্রহণযোগ্য উত্তর হওয়া উচিত এবং ক্যুসিটনের সাথে সবচেয়ে প্রাসঙ্গিক ..!
রাজেশ এমবিএম

7
উল্লেখ করার জন্য আপনাকে ধন্যবাদ Access-Control-Max-Age। এটাই এখানে চাবি। এটি আপনাকে অতিরিক্ত প্রাকফ্লাইট অনুরোধগুলি এড়াতে সহায়তা করে।
ইদ্রিস মোক্তারজাদা

আমি অনুরোধ কল করতে অক্ষর ব্যবহার করছি। অ্যাক্সেস-অনুরোধে আমি অ্যাক্সেস-কন্ট্রোল-সর্বোচ্চ-বয়সকে কোথায় সেট করতে পারি?
মোহিত শাহ

+1 অ্যাক্সেস-কন্ট্রোল-সর্বোচ্চ-বয়স শিরোনাম এখানে মূল কী। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত! আমি হেডারে 86400 সেকেন্ড (24 ঘন্টা) সেটআপ করেছি এবং পূর্বনির্ধারিত অনুরোধটি চলে গেছে!
revobtz

1
পুনঃটুইট এড়াবেন না application/jsonকারণ এটি আপনার অনুরোধটিকে "সরল" নয় (এবং এইভাবে সিওআরএসকে ট্রিগার করে)। ব্রাউজারটি তার কাজ করছে। আপনার সার্ভারটি এমন শিরোনামের মতো কিছু ফেরত দিতে সেট করুন Access-Control-Max-Age: 86400এবং ব্রাউজারটি 24 ঘন্টার জন্য কোনও অপশন অনুরোধ পুনরায় পাঠাবে না।
colm.anseo

139

প্রাক-ফ্লাইটেড অপশন অনুরোধের আসল প্রয়োজনের বিষয়ে দয়া করে এই উত্তরটি উল্লেখ করুন: সিওআরএস - প্রিফলাইট অনুরোধগুলি প্রবর্তনের পিছনে অনুপ্রেরণা কী?

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

  1. অনুরোধটি 'অ্যাপ্লিকেশন / এক্সএমএল' বা 'অ্যাপ্লিকেশন / জেসন' ইত্যাদির মতো কাস্টম এইচটিটিপি শিরোনাম সেট করে না
  2. অনুরোধ পদ্ধতিটি জিইটি, হেড বা পোষ্টগুলির মধ্যে একটি হতে হবে। পোস্ট করেন বিষয়বস্তুর প্রকার কোনো একটি হওয়া আবশ্যক application/x-www-form-urlencoded, multipart/form-dataঅথবাtext/plain

তথ্যসূত্র: https://developer.mozilla.org/en-US/docs/Web/HTTP/Acecess_control_CORS


14
"কাস্টম HTTP শিরোনাম" জন্য +1! আমার ক্ষেত্রে, তারা প্রি-ফ্লাইটের অনুরোধটিকে ট্রিগার করার কারণ করছিল। অনুরোধ সংস্থা এবং বিকল্পগুলির অনুরোধগুলি প্রেরণ করা বন্ধ হওয়ায় আমি শিরোনামগুলিতে যা যা পাঠাচ্ছিলাম তা প্রেরণের অনুরোধটি আমি রিফ্যাক্ট করেছিলাম।
আন্দ্রে

21
application/xmlবা application/json"কাস্টম HTTP শিরোনাম" নয়। শিরোনামটি নিজেই হবে Content-Typeএবং সেই শিরোনামটিকে "কাস্টম" বলা বিভ্রান্তিকর হবে।
লিও কোরিয়া

1
কাস্টম এইচটিটিপি শিরোনাম সরানো হয়েছে এবং এটি একটি কবজির মতো কাজ করেছে!
টিম ডি

47

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


3
ওহ আমি কি ভাবছি ঘন্টাখানেক ডিবাগিং করা আমার সমাধান ছিল। ডিবাগ কনসোলের কারণে ক্যাশে অক্ষম করা হয়েছে।
মরিস

1
ডিবাগ কনসোলটি বন্ধ থাকলেও প্রিফলাইট অনুরোধগুলি প্রেরণ করা হয়
লুকা পেরিকো

2
লুকা: এটি সত্য তবে মূল বিষয়টি হ'ল দেব সরঞ্জামগুলি বন্ধ হয়ে গেলে "অক্ষম ক্যাশে" এর কোনও প্রভাব নেই। ক্যাফ অক্ষম না করা থাকলে এবং ক্যাশে অক্ষম থাকলে প্রতিটি অনুরোধের আগে প্রিফলাইট অনুরোধগুলি একবার পাঠানো হয় (অবশ্যই প্রতিটি সার্ভারে) c
নীড়

এটা সত্যিই সহায়ক ছিল।
অনুরাগ পাতিল

38

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

এখানে একবার দেখুন: https://github.com/jpillora/xdomain

এবং কাজের উদাহরণ: http://jpillora.com/xdomain/


এটি কি আসলে এক ধরণের ড্রপ-ইন প্রক্সি?
ম্যাটানস্টার

15
"আপনি যখন অন্য কোনও ডোমেইনে কোনও ডেটা প্রেরণ করেন (পোস্ট করেন) তখন বিকল্পগুলির অনুরোধ একটি প্রিফলাইট অনুরোধ" " - এটা সত্যি না. প্রিফ্লাইট অনুরোধটি ট্রিগার না করে আপনি কোনও সাধারণ এইচএমএল ফর্ম সহ যে পোষ্ট অনুরোধটি প্রেরণ করতে পারেন তা প্রেরণের জন্য আপনি এক্সএইচআর ব্যবহার করতে পারেন। আপনি যখন এমন কোনও কাজ শুরু করেন কেবল কোনও ফর্ম যা করতে পারে না (যেমন কাস্টম সামগ্রীর প্রকার বা অতিরিক্ত অনুরোধ শিরোনাম) প্রিফলাইট প্রেরণ করা হয়।
কোয়ান্টিন

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

5
আইফ্রেমগুলি সে জন্য তৈরি করা হয়নি।
রোমকো

1
এটি একটি সফ্টওয়্যার বাস্তবায়ন এবং চূড়ান্ত প্রশ্নের উত্তর দেয় যা ছিল: "ব্রাউজারটি অপ্টিশন অনুরোধগুলি প্রেরণে পুরোপুরি বন্ধ করার কোনও উপায় আছে কি?" দীর্ঘ গল্প সংক্ষেপে, এটি মজিলা বা ক্রোমিয়ামে অক্ষম করার কোনও উপায় নেই, এটি কোডে প্রয়োগ করা হয়েছে এবং কেবলমাত্র "কার্যকরী" বিকল্পগুলি আচরণকে বাধা দেয়।
স্ক্যাভেন্জার

15

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

আমি পেয়েছি আপনি ম্যাকের সাফারি এবং ক্রোমে সিওআরএস অক্ষম করতে পারেন।

ক্রোমে একই উত্স নীতিটি অক্ষম করুন

ক্রোম: ক্রোমটি প্রস্থান করুন, একটি টার্মিনাল খুলুন এবং এই আদেশটি আটকান: open /Applications/Google\ Chrome.app --args --disable-web-security --user-data-dir

সাফারি: সাফারিতে সম-উত্স নীতি অক্ষম করা হচ্ছে

আপনি যদি সাফারি (আমার 9.1.1 আছে) তে একই-উত্স নীতিটি অক্ষম করতে চান, তবে আপনাকে কেবল বিকাশকারী মেনুটি সক্ষম করতে হবে এবং বিকাশ মেনু থেকে "ক্রস-ওরিজিন সীমাবদ্ধতাগুলি অক্ষম করুন" নির্বাচন করুন।


4
আপনার যে অংশটি বলা হয়েছে " তার পক্ষে আরও হাইলাইট করা উচিত " এটি কখনই একটি সমাধানের সমাধান হওয়া উচিত নয় !!!! " । একই উত্স নীতি একটি অত্যন্ত গুরুত্বপূর্ণ ব্রাউজার সুরক্ষা পরিমাপ এবং সাধারণত যখন ইন্টারনেট ব্রাউজ করা হয় তখন কখনই অক্ষম করা উচিত নয়।
জান্নিস

আমি আশা করি ওয়েবটি কেবল এইভাবে কাজ করে, তাই আমরা কেবল অতিরিক্ত ঝামেলা ছাড়াই সার্ভারগুলি থেকে আমাদের প্রয়োজনীয় ডেটা অনুরোধ করতে পারি।
জিমিলোই

14

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

আপনার সার্ভারটি Access-Control-Max-Ageশিরোনামের সাথে উত্তর দিন এবং অনুরোধগুলি যা একই প্রান্তে যেতে পারে সেই প্রিফলাইট অনুরোধটি ক্যাশে হয়ে গেছে এবং আর ঘটবে না।


1
এই জন্য আপনাকে ধন্যবাদ! OPTIONSএই শিরোলেখের সাথে অনুরোধগুলি ক্যাশে করা হবে তা যে সমস্ত সিআরএস ডকুমেন্টেশন পড়েছি তার মধ্যে এটি খুব অস্বচ্ছ।
joshperry

এবং ক্যাশে কেবল একই একই url এর সাথে কার্যকর হয়। আমি একটি ডোমেন-স্তরের প্রাকফ্লাইট ক্যাশে চাই যা সত্যই রাউন্ড ট্রিপগুলি হ্রাস করতে পারে। (সিওআরএস নির্বোধ!)
অবাক

8

আমি এই সমস্যার মতো সমাধান করেছি।

if($_SERVER['REQUEST_METHOD'] == 'OPTIONS' && ENV == 'devel') {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Headers: X-Requested-With');
    header("HTTP/1.1 200 OK");
    die();
}

এটি কেবল উন্নয়নের জন্য। এর সাথে আমি 9 এসএম এবং 500 মিমি এবং 8 এস এবং 500 মিমি অপেক্ষা করছি না। আমি এটি করতে পারি কারণ প্রোডাকশন জেএস অ্যাপ্লিকেশন একই মেশিনে থাকবে যেমন উত্পাদন হবে তাই সেখানে কোনও কিছুই থাকবে না OPTIONSতবে উন্নয়ন আমার স্থানীয়।


4

আপনি পারবেন না তবে আপনি JSONP ব্যবহার করে CORS এড়াতে পারবেন।


2
আপনি যদি সহজ কিছু না করেন তবে কেবলমাত্র একটি বিকল্পের অনুরোধ পাবেন । আপনি কেবল JSONP এর সাথে সাধারণ অনুরোধগুলি (জিইটি, কোনও কাস্টম শিরোনাম, কোনও প্রমাণীকরণের ডেটা) করতে পারবেন না, যাতে জেএসএনপি এখানে প্রতিস্থাপন করতে পারে না।
কোয়ান্টিন

হ্যাঁ, আমি এটি জানি তবে আমি ঠিক প্রকল্পের প্রয়োজনীয়তাগুলি জানি না। আমি জানি এটি কোনও সহজ এড়ানোর কাজ নয় তবে এটি প্রকল্পের উপর নির্ভর করে। CORS এড়ানোর জন্য সবচেয়ে খারাপ পরিস্থিতিতে আপনাকে পরামিতিগুলি ব্যবহার করে ডেটা পাস করতে হবে। সুতরাং, জেএসএনপি প্রকল্পের প্রয়োজনীয়তার উপর নির্ভর করে করগুলি প্রতিস্থাপন করতে পারে (যেমন আপনি বলেছিলেন, সাধারণ অনুরোধগুলি ব্যবহার করে)
জোসে মাতো

আমি তথাকথিত প্রাক ফ্লাইটের নকশা বুঝতে পারি না। ক্লায়েন্ট যদি সার্ভারে ডেটা প্রেরণ করার সিদ্ধান্ত নিয়ে থাকে তবে কী এটি অনিরাপদ হতে পারে? আমি দেখছি না যে তারের বোঝা দ্বিগুণ করার কোনও অর্থ হয়।
কিয়ান চেন

এই @ElgsQianChen সম্ভবত আপনার প্রশ্নের উত্তর দিতে পারেন stackoverflow.com/questions/15381105/...
লিও কোড়িয়া

0

পুরো একটি দেড় দিন একই ধরণের সমস্যার মধ্য দিয়ে কাজ করার চেষ্টা করার পরে আমি দেখতে পেলাম এটি আইআইএস-এর সাথে জড়িত ।

আমার ওয়েব এপিআই প্রকল্পটি নীচে সেট আপ করা হয়েছিল:

// WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
    var cors = new EnableCorsAttribute("*", "*", "*");
    config.EnableCors(cors);
    //...
}

ওয়েবকনফিগ> সিস্টেমে.সেবাব্লু সার্ভার নোডে আমি অনেকগুলি পোস্টে দেখেছি এমন কোনও সিওআরএস নির্দিষ্ট কনফিগার বিকল্প নেই did

গ্লোবাল.এএসএক্সে বা ডেকরেটার হিসাবে নিয়ামক হিসাবে কোনও সিওআরএস নির্দিষ্ট কোড নেই

সমস্যাটি ছিল অ্যাপ পুলের সেটিংস

পরিচালিত পাইপলাইন মোড ক্লাসিক (সেট ছিল ইন্টিগ্রেটেড তা পরিবর্তিত ) এবং আইডেন্টিটি নেটওয়ার্ক সার্ভিস সেট হয়েছিল ( ApplicationPoolIdentity তা পরিবর্তিত )

এই সেটিংস পরিবর্তন করা (এবং অ্যাপ্লিকেশন পুলটি রিফ্রেশ করা) এটি আমার জন্য স্থির করে।


-2

আমার পক্ষে কাজটি ছিল "github.com/gorilla/handlers" আমদানি করা এবং তারপরে এটি ব্যবহার করা:

router := mux.NewRouter()
router.HandleFunc("/config", getConfig).Methods("GET")
router.HandleFunc("/config/emcServer", createEmcServers).Methods("POST")

headersOk := handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})

log.Fatal(http.ListenAndServe(":" + webServicePort, handlers.CORS(originsOk, headersOk, methodsOk)(router)))

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


-2

আমি অতীতে একটি সমাধান ব্যবহার করেছি - এটি বলতে দিন যে আপনার সাইটটি মাইডোমেন ডটকম এ রয়েছে এবং আপনাকে ফোরইগেন্ডোমাইন ডট কম এজেক্স অনুরোধ করতে হবে

আপনার ডোমেন থেকে বিদেশী ডোমেনে আইআইএস পুনর্লিখনটি কনফিগার করুন - যেমন

<rewrite>
  <rules>
    <rule name="ForeignRewrite" stopProcessing="true">
        <match url="^api/v1/(.*)$" />
        <action type="Rewrite" url="https://foreigndomain.com/{R:1}" />
    </rule>
  </rules>
</rewrite>

আপনার মাইডোমেন.কম. সাইটে - আপনি তখন একই উত্স অনুরোধ করতে পারেন, এবং কোনও বিকল্পের অনুরোধের প্রয়োজন নেই :)


-2

এটি কোনও প্রক্সি ব্যবহারের ক্ষেত্রে সমাধান করা যেতে পারে যা অনুরোধটিকে বাধা দেয় এবং উপযুক্ত শিরোনাম লিখতে পারে। বার্নিশের বিশেষ ক্ষেত্রে এগুলি হ'ল নিয়ম:

if (req.http.host == "CUSTOM_URL" ) {
set resp.http.Access-Control-Allow-Origin = "*";
if (req.method == "OPTIONS") {
   set resp.http.Access-Control-Max-Age = "1728000";
   set resp.http.Access-Control-Allow-Methods = "GET, POST, PUT, DELETE, PATCH, OPTIONS";
   set resp.http.Access-Control-Allow-Headers = "Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since";
   set resp.http.Content-Length = "0";
   set resp.http.Content-Type = "text/plain charset=UTF-8";
   set resp.status = 204;
}

}


-5

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

আমি যদি কিছু সময় পাই তবে আমি এটি পরীক্ষা করে এই পোস্টটি আপডেট করব!

সিএসপি: https://developer.mozilla.org/fr/docs/Web/HTTP/Heeda/Content-Security- নীতি

সিএসপি সুনির্দিষ্ট: https://www.w3.org/TR/CSP/


আমি শুধু পরীক্ষা, তাই না কাজ, CORS এখনও সিএসপি পরে XHR অনুরোধ ভর্তি প্রয়োজন বোধ করা হয় না ...
Arnaud Tournier
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.