অনুরোধকৃত উত্সটিতে কোনও 'অ্যাক্সেস-কন্ট্রোল-অলজন-অরিজিন' শিরোনাম উপস্থিত নেই। উত্স '...' এর ফলে অ্যাক্সেসের অনুমতি নেই


135

আমি url পুনর্লিখনের জন্য .htaccess ব্যবহার করছি এবং এটি কার্যকর করার জন্য আমি এইচটিএমএল বেস ট্যাগ ব্যবহার করেছি।

এখন, যখন আমি একটি এজ্যাক্স অনুরোধ করার চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:

XMLHttpRequest লোড করতে পারে না http://www.example.com/login.php। অনুরোধকৃত উত্সটিতে কোনও 'অ্যাক্সেস-কন্ট্রোল-অলজন-অরিজিন' শিরোনাম উপস্থিত নেই। মূল ' http://example.com' এর ফলে অ্যাক্সেসের অনুমতি নেই।


1
কোনও বিষয় নয় ... এটি এখন কাজ করছে, আমি জানি না ভুলটি কী ছিল: এস

8
সূক্ষ্ম Altough, http://wordicious.comএকটি হল আলাদা ডোমেন চেয়ে http://www.wordicious.com/, এইভাবে ত্রুটি। বিটিডব্লিউ, যদি এটি এখন কাজ করে এবং নিজেই ফিরে আসে, আপনার সম্ভবত প্রশ্নটি মুছে ফেলা উচিত।
acdcjunior

@acdcjunior এটিকে ত্রুটি বলে মনে হচ্ছে, যা আপনার পক্ষে একটি চমকপ্রদ পর্যবেক্ষণ। আপনি যদি উত্তর হিসাবে পোস্ট করেন আমি এটি upvote হবে।
ওয়ালিদ খান

5
প্রশ্নটি মুছে ফেলা হয়নি এটি একটি ভাল বিষয়, বা আমি আজ এটি দেখতে পেতাম না!
আইসড ওয়াটার

উত্তর:


170

পদ্ধতি addHeaderব্যবহার setHeaderকরার পরিবর্তে ব্যবহার করুন ,

response.addHeader("Access-Control-Allow-Origin", "*");

*উপরের লাইনে অনুমতি দেবে access to all domains


অনুমতি দেওয়ার জন্য access to specific domain only:

response.addHeader("Access-Control-Allow-Origin", "http://www.example.com");

এটি পরীক্ষা করে দেখুন blog post


4
এটি অ্যাডহেডার দেখাচ্ছে যা সংজ্ঞায়িত হয়নি। আপনি দয়া করে এটি ব্যাখ্যা করতে পারেন?
বৈশাখ পিসি

9
আমি এই লাইনগুলি কোথায় রাখব?
ডেভওয়ালি

14
এটি কোথায় যুক্ত করা উচিত?
অ্যালেক্স

1
সেই ব্লগ পোস্টটি নোড.জেএস এবং এক্সপ্রেস সম্পর্কে কথা বলছে। ক্লায়েন্ট পার্শ্ব জাভাস্ক্রিপ্ট না। এই কাজ করে যদি কেউ নিশ্চিত করতে পারেন?
স্যাম ইটন

1
আমি মনে করি না এই কনফিগারেশনটি কেবল ক্লায়েন্টের পক্ষেই করা যেতে পারে .. সুতরাং এটি কোথায় রাখা উচিত তা সার্ভার সাইড কোডে হবে (সম্ভবত কোনও অনুরোধের প্রতিক্রিয়া তৈরি করার সময়)
চিরাগ রবীন্দ্র

145

ত্রুটি কেন উত্থাপিত হয়:

জাভাস্ক্রিপ্ট কোড দ্বারা সীমাবদ্ধ একই বংশোদ্ভূত নীতি এ পাতা থেকে, অর্থ, www.example.com, আপনি শুধুমাত্র (অ্যাজাক্স) এ অবস্থিত পরিষেবার অনুরোধ করতে পারেন ঠিক , একই ডোমেনে যে ক্ষেত্রে ঠিক www.example.com( না example.com - ছাড়া www- অথবা whatever.example.com)।

আপনার ক্ষেত্রে, আপনার এজাক্স কোডটি http://wordicious.comএকটি পৃষ্ঠা থেকে অবস্থিত কোনও পরিষেবাতে পৌঁছানোর চেষ্টা করছে http://www.wordicious.com

যদিও অনুরূপ, তারা না একই ডোমেন। এবং যখন তারা একই ডোমেনে না থাকে, তখনই অনুরোধটি সফল হবে যদি লক্ষ্যটির রেসোসেসটিতে একটি Access-Control-Allow-Originশিরোনাম থাকে ।

আপনার পৃষ্ঠা / পরিষেবাটি http://wordicious.comযেমন শিরোনাম উপস্থাপনের জন্য কখনই কনফিগার করা হয়নি, ত্রুটি বার্তাটি দেখানো হয়েছে।

সমাধান:

হিসাবে বলেন, মূল (যেখানে জাভাস্ক্রিপ্ট পৃষ্ঠায় হয়) এবং টার্গেট (যেখানে জাভাস্ক্রিপ্ট পৌঁছানোর চেষ্টা করা হয়) ডোমেইনের হতে হবে সঠিক একই।

আপনার কেসটি টাইপের মতো মনে হচ্ছে। দেখে মনে হচ্ছে http://wordicious.comএবং http://www.wordicious.comআসলে একই সার্ভার / ডোমেন। সুতরাং ঠিক করতে, লক্ষ্যটি এবং মূলটিকে সমানভাবে টাইপ করুন: আপনাকে এজাক্স কোডের অনুরোধ পৃষ্ঠা বা পরিষেবাগুলি http://www.wordicious.comনা করার জন্য করুনhttp://wordicious.com । (সম্ভবত লক্ষ্যযুক্ত URL টি '/login.php'ডোমেন ছাড়াই তুলনামূলকভাবে রাখুন )।



আরও সাধারণ নোটে:

সমস্যা একটি টাইপো না হয়, তাহলে এই প্রশ্নের এক হতে দেখে মনে হচ্ছে, সমাধান হবে যোগ Access-Control-Allow-Originলক্ষ্য ডোমেনে । এটি যুক্ত করার জন্য, অবশ্যই এই ঠিকানার পিছনে সার্ভার / ভাষার নির্ভর করে। কখনও কখনও সরঞ্জামটিতে একটি কনফিগারেশন ভেরিয়েবল কৌশলটি করে। অন্যান্য সময় আপনাকে নিজের কোডের মাধ্যমে শিরোনাম যুক্ত করতে হবে।


62

.NET সার্ভারের জন্য এটি নীচের মত ওয়েবকনফাইগে কনফিগার করতে পারে

 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="your_clientside_websiteurl" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>

উদাহরণস্বরূপ বলা যাক, সার্ভার ডোমেনটি যদি http://live.makemypublication.com হয় এবং ক্লায়েন্টটি http://www.makemypublication.com হয় তবে নীচের মত সার্ভারের ওয়েবকনফিগে কনফিগার করুন

 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="http://www.makemypublication.com" />
     </customHeaders>
  </httpProtocol>
 </system.webServer>

আরও ভাল সমাধান। ধন্যবাদ
এএনজেওয়াইআর -

অনেক ধন্যবাদ. আপনি আমার পুরো দিনটি বাঁচিয়েছিলেন।
প্রীতেক গুপ্ত

2 বছর পরেও কাজ করছে: পি
সর্বব্যাপী বিকাশকারী

1
@ সৈয়দআলিটাইকি প্রশ্নটি পিএইচপি, সে কারণেই উত্তরটি নিম্নরেখাঙ্কিত হয়। তবে এটি আমার
আহমাদ থে

22

আপনি যদি ব্রাউজার থেকে এই ত্রুটি বার্তাটি পান:

অনুরোধকৃত উত্সটিতে কোনও 'অ্যাক্সেস-কন্ট্রোল-অলজন-অরিজিন' শিরোনাম উপস্থিত নেই। উত্স '...' এর ফলে অ্যাক্সেসের অনুমতি নেই

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

<?php header('Access-Control-Allow-Origin: *'); ?>

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

আপনার জাভাস্ক্রিপ্টে প্রথমে নিজের সার্ভারে একটি অ্যাজাক্স কল করুন, এরকম কিছু:

$.ajax({
    url: yourserver.com/controller/proxy.php,
    async:false,
    type: "POST",
    dataType: "json",
    data: data,
    success: function (result) {
        JSON.parse(result);
    },
    error: function (xhr, ajaxOptions, thrownError) {
        console.log(xhr);
    }
});

তারপরে, আপনার পোস্টের ডেটা মোড়ানো এবং পরামিতি হিসাবে দূরবর্তী ইউআরএল সার্ভারে যুক্ত করতে প্রক্সি.এইচপি নামে একটি সাধারণ পিএইচপি ফাইল তৈরি করুন। এক্সপিডিয়া হোটেল অনুসন্ধান API দিয়ে আমি কীভাবে এই সমস্যাটিকে বাইপাস করি তার একটি উদাহরণ দিচ্ছি:

if (isset($_POST)) {
  $apiKey = $_POST['apiKey'];
  $cid = $_POST['cid'];
  $minorRev = 99;

  $url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?' . 'cid='. $cid . '&' . 'minorRev=' . $minorRev . '&' . 'apiKey=' . $apiKey;

  echo json_encode(file_get_contents($url));
 }

করেছে:

 echo json_encode(file_get_contents($url));

আপনি কেবল একই কোয়েরিটি করছেন তবে সার্ভারের দিকে এবং তার পরে, এটি ঠিক কাজ করবে should


@ নিজারবিএসবি আপনি পাগল তা জানেন যে !!!!! : ডি, অনেক ধন্যবাদ আপনার উত্তর আমার জীবন বাঁচিয়েছে
ফ্ল্যাশ


7

বিকল্পগুলির পদ্ধতির প্রতিক্রিয়াতে আপনাকে শিরোনাম কীগুলি / মান রাখতে হবে। উদাহরণস্বরূপ, যদি আপনার http://mydomain.com/myresource এ সংস্থান থাকে তবে আপনার সার্ভার কোডে আপনি লিখেন

//response handler
void handleRequest(Request request, Response response) {
    if(request.method == "OPTIONS") {
       response.setHeader("Access-Control-Allow-Origin","http://clientDomain.com")
       response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
       response.setHeader("Access-Control-Allow-Headers", "Content-Type");
    }



}

3

মূলত নিম্নলিখিত অতিরিক্ত পরামিতিগুলি যুক্ত করে এপিআই শিরোনাম প্রতিক্রিয়া পরিবর্তন করুন।

অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি-শংসাপত্রসমূহ: সত্য

অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স: *

সুরক্ষার বিষয়টি যখন আসে তখন এটি ভাল সমাধান নয়


3

কাজটি হ'ল আপনার 'উত্স' হোস্টে চলমান বিপরীত প্রক্সি ব্যবহার এবং আপনার টার্গেট সার্ভারে যেমন ফিডলারের কাছে ফরোয়ার্ড করা:

এখানে লিঙ্ক করুন: http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy

অথবা একটি অ্যাপাচি বিপরীত প্রক্সি ...


এটি কোনও ডোমেনের জন্য অ্যাপাচি বা এনগিনেক্স কনফিগার স্তরে করা যেতে পারে? উদাহরণস্বরূপ যদি কোনও ব্যবহারকারী mysite.com (কোনও www নয়) অ্যাক্সেস করছে এবং এক্সএইচআর www.mysite.com এর জন্য অনুরোধ করছে তবে কোনও এইচটিসেস বা httpd.conf নির্দেশিকা কী এটিকে সমাধান করতে পারে?
কোডেকবয়

অবশ্যই, আপনার ফ্রন্ট-এন্ড অ্যাপ্লিকেশনটিকে বিপরীত প্রক্সি হিসাবে আচরণ করা উচিত। উদাহরণস্বরূপ অ্যাপাচি-এর জন্য আপনাকে মোড_প্রক্সি ইনস্টল করতে হবে এবং প্রক্সিপাসরয়েভার্স ব্যবহার করে আপনার বিধিগুলি কনফিগার করতে হবে ( httpd.apache.org/docs/current/mod/… )। একই বৈশিষ্ট্যগুলি এনগিনেক্সেও পাওয়া
hzrari

2

এটি আপনাকে পিএইচপি ফাইল বা প্রধান নিয়ামক যুক্ত করুন

header("Access-Control-Allow-Origin: http://localhost:9000");

শেষ করার জন্য - আপনার এটিও দরকারheader("Access-Control-Allow-Credentials: true");
অ্যাডাম

1

Httpd.conf এ নীচে প্রবেশের সাথে সমাধান করা

#CORS Issue
Header set X-Content-Type-Options "nosniff"
Header always set Access-Control-Max-Age 1728000
Header always set Access-Control-Allow-Origin: "*"
Header always set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT,PATCH"
Header always set Access-Control-Allow-Headers: "DNT,X-CustomHeader,Keep-Alive,Content-Type,Origin,Authentication,Authorization,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control"
Header always set Access-Control-Allow-Credentials true

#CORS REWRITE
RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
#RewriteRule ^(.*)$ $1 [R=200,L]
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]]

একমাত্র উপায় যা আমার জন্য অ্যাপাচি 2, সেন্টোস 7, লাররাভেল 5 এবং প্রতিক্রিয়াতে কাজ করেছিল
শাকিবা

0

অনুগ্রহ করে অনুরোধ শিরোনাম স্থাপনের জন্য জাভাস্ক্রিপ্টে এক্সএমএলএইচটিপিআরকিউইএসটিতে ব্যবহৃত ফাংশনটি খুঁজে পান।

...

xmlHttp.setRequestHeader("Access-Control-Allow-Origin", "http://www.example.com");
...
</script>

তথ্যসূত্র: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader

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