অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স দ্বারা উত্স অনুমোদিত নয় allowed


337

আমি Ajax.requestএকটি সঞ্চা টাচ 2 অ্যাপ্লিকেশন ( ফোনগ্যাপে মোড়ানো ) একটি রিমোট পিএইচপি সার্ভারে একটি করছি ।

সার্ভারের প্রতিক্রিয়া নিম্নলিখিত:

এক্সএমএলএইচটিপিআরকোয়েস্ট http://nqatolog.negroesquisso.pt/login.php লোড করতে পারে না । http://localhost:8888অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স দ্বারা উত্স অনুমোদিত নয় allowed

আমি কিভাবে এই সমস্যা ঠিক করতে পারবো?


19
jQuery ব্যবহার করার সময়, সেটিংটি dataType: 'jsonp',কৌশলটি করে
অমিত

11
সার্ভার থেকে সাড়া না যে উপায় দ্বারা। সুনির্দিষ্টভাবে বলতে গেলে ক্লায়েন্টের পক্ষ থেকে ত্রুটি জারি করা হয়।
মাত্তেও

2
Jsonp কৌতুক সম্ভবত আর কাজ করে না, FYI: stackoverflow.com/questions/12216208/...
drewww

7
দ্রষ্টব্য, যেহেতু আমি এই বাগটি তাড়া করে কেবলমাত্র অর্ধদিন নষ্ট করেছি - যদি সার্ভার সাইড স্ক্রিপ্ট কোনও অভ্যন্তরীণ সার্ভার ত্রুটিতে ব্যর্থ হয় তবে ব্রাউজারটি এটি ব্যাখ্যা করতে পারে যেন অনুরোধের কারণে অনুমতি দেওয়া হয়নি Access-Control-Allow-Originএবং ত্রুটি হিসাবে এটির প্রতিবেদন করতে পারে ।
Troelskn

1
আপনি কি আমার জীবন বাঁচিয়েছেন আমি 3 দিন থেকে কিছু সিওআরএস ভুলটি অনুসন্ধান করছিলাম, এবং এটি 500 টির কারণ হিসাবে কেবল একটি সামান্য বসন্ত কনফিগারেশন সমস্যা ছিল, যা আমি আপনার মন্তব্যটি পড়ার পরে 5 মিনিটের মধ্যে সমাধান করেছি এবং আমি আসলে এটি সন্ধান করেছি। ধন্যবাদ!
অ্যালেক্সিস ডুফরনয়

উত্তর:


378

ক্রস ডোমেন এজেএক্স , আমি কিছুক্ষণ আগে এই ইস্যুতে একটি নিবন্ধ লিখেছিলাম ।

প্রতিক্রিয়াশীল সার্ভারের নিয়ন্ত্রণ থাকলে এটি পরিচালনা করার সহজতম উপায় হ'ল এর জন্য একটি প্রতিক্রিয়া শিরোনাম যুক্ত করা:

Access-Control-Allow-Origin: *

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

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

আপনি কেবল অ্যাপাচি কনফিগারেশন বা htaccess ফাইলে Header set Access-Control-Allow-Origin *সেটিংসটি রাখতে পারেন ।

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

<?php header('Access-Control-Allow-Origin: http://example.com') ?>

4
আমি আমার সার্ভার সরবরাহকারীর সাথে যোগাযোগ করব। ধন্যবাদ
রিকার্ডো

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

4
আশ্চর্যজনক, আমি এটি কেবল আমার নোড.জেএস সার্ভার ফাইলে রেখেছি: প্রতিক্রিয়া.উইরথহিড (২০০, Content 'সামগ্রী-ধরণের': সামগ্রী টাইপ, 'অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি দিন': '*'}); এবং এটা কাজ করে. ধন্যবাদ!
ভবলিংগার

25
জনক, হ্যাঁ, ওয়াইল্ডকার্ড কোনও হোস্টকে আপনার হোস্টের কাছে অনুরোধগুলি প্রেরণের অনুমতি দেবে। আমি তারকাচিহ্নটি একটি নির্দিষ্ট ডোমেনের সাথে প্রতিস্থাপন করার পরামর্শ দিচ্ছি যা আপনি স্ক্রিপ্টগুলি চালাবেন।
নিক

7
এটি আকর্ষণীয় যে আপনি মনে করেন যে ওয়াইল্ডকার্ডকে @ jfrej পরামর্শ দেওয়া উচিত নয়। এটি সব আপনার লক্ষ্যের উপর নির্ভর করে। উদাহরণস্বরূপ, আমরা ওয়াইল্ডকার্ডটি ব্যবহার করার কারণটি (এবং এই উত্তরটি পোস্ট করা হয়েছিল) কারণ আমরা কোনও সাইটের ব্যবহারের জন্য একটি এমবেডড উইজেট তৈরি করছিলাম।
ম্যাট মোম্ব্রেয়া

63

আপনি যদি না সার্ভারের নিয়ন্ত্রণ আছে, আপনি কেবল আপনার Chrome লঞ্চারের এই যুক্তি যুক্ত করতে পারেন: --disable-web-security

নোট করুন যে আমি এটি সাধারণ "ওয়েব সার্ফিং" এর জন্য ব্যবহার করব না। রেফারেন্সের জন্য, এই পোস্টটি দেখুন: Chrome এ একই উত্স নীতিটি অক্ষম করুন

আপনি অ্যাপ্লিকেশনটি তৈরি করতে এবং এটি ডিভাইসে লোড করার জন্য আপনি ফোনগ্যাপ ব্যবহার করেন, এটি কোনও সমস্যা হবে না।


ধন্যবাদ। তবে আমার অ্যাপ্লিকেশনটি মোবাইল ডিভাইসে চলছে, আমি আমার ওয়েবভিউ র‍্যাপারে যুক্তিগুলি পাস করতে পারি না।
রিকার্ডো

আপনি কি প্রথমে আপনার ব্রাউজারে নিজের অ্যাপটি পরীক্ষা করেন না? আপনি কিভাবে ডিবাগ করবেন?
ট্র্যাভিস ওয়েব

হ্যাঁ আমি একটি ক্রোম ব্রাউজারে ডিবাগ করি তবে অ্যাপটি ক্রোমে চালিত হয় না। এটি ফোনগ্যাপ ওয়েবভিউ ডাইনে থাকবে না আমি নিয়ন্ত্রণ করতে পারি না।
রিকার্ডো

4
উত্তরটি পড়ুন: আপনি কেবল আপনার ক্রোম লঞ্চারটিতে এই যুক্তিটি যুক্ত করতে পারেন । ক্রোমের অভ্যন্তরে এটির জন্য কোনও সেটিং নেই
ট্র্যাভিস ওয়েব

2
অবশ্যই এটি অনিরাপদ। ওপি সুরক্ষা ব্যবস্থা গ্রহণের উপায় চেয়েছে।
ট্র্যাভিস ওয়েব

42

আপনি যদি অ্যাপাচি ব্যবহার করেন তবে যুক্ত করুন:

<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>

আপনার কনফিগারেশন। এটি আপনার ওয়েবসার্ভারের সমস্ত প্রতিক্রিয়া ইন্টারনেটে অন্য কোনও সাইট থেকে অ্যাক্সেসযোগ্য হয়ে উঠবে। যদি আপনি কেবল কোনও নির্দিষ্ট সার্ভার দ্বারা আপনার হোস্টের পরিষেবাগুলি ব্যবহারের অনুমতি দেওয়ার উদ্দেশ্যে থাকেন তবে আপনি *উত্পন্ন সার্ভারের URL টি প্রতিস্থাপন করতে পারেন :

Header set Access-Control-Allow-Origin: http://my.origin.host

3
এবং মডিউলটি লোড করতে ভুলবেন না: a2enmod শিরোনাম
ওয়ালারি স্ট্রাচ

মডিউলটি কীভাবে লোড করবেন: a2enmod হেডার?
আয়েশা

18

আপনার যদি ASP.NET / ASP.NET MVC অ্যাপ্লিকেশন থাকে, আপনি ওয়েব শিরোনাম ফাইলের মাধ্যমে এই শিরোনামটি অন্তর্ভুক্ত করতে পারেন:

<system.webServer>
  ...

    <httpProtocol>
        <customHeaders>
            <!-- Enable Cross Domain AJAX calls -->
            <remove name="Access-Control-Allow-Origin" />
            <add name="Access-Control-Allow-Origin" value="*" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

2
। নেট এমভিসি লোকেরা, এখানে দেখুন! আমি আসলে একটি সমাধান টাইপ করতে যাচ্ছি এবং আমার ব্লগে এই উত্তরটির দিকে ইঙ্গিত করব যাতে লোকেরা এটি আরও সহজে খুঁজে পেতে পারে। .NET / MVC বাধা পেরিয়ে যাওয়ার চেষ্টা করা এবং পিএইচপি / জিকুয়েরি সমাধানগুলি ছাড়া আর কিছুই খুঁজে পাওয়ার চেয়ে খারাপ আর কিছু নয়। ধন্যবাদ @ কায়ো-প্রিয়েট
ottoflux

1
কীভাবে এটি আমার পক্ষে কাজ করে না? আমি ক্রোম ব্যবহার করছি এবং আমার লোকাল হোস্ট থেকে ইয়াহু ফিনান্স পৃষ্ঠা অ্যাক্সেস করার চেষ্টা করছি।
নিউম্যান

1
ধন্যবাদ এটি আমার জন্য কাজ করেছে। আমি সার্ভার সাইড কোড প্রকল্পে যুক্ত করেছি (ওয়েবকনফিগ)।
এথেম

15

আমার ডেটার উত্স হিসাবে এএসপি.নেট এমভিসি ব্যবহার করে একই সমস্যাটি সমাধান করার চেষ্টা করার সময় এটিই প্রথম প্রশ্ন / উত্তর ছিল । আমি বুঝতে পারি এটি পিএইচপি প্রশ্নটি সমাধান করে না , তবে এটি মূল্যবান হওয়ার জন্য যথেষ্ট সম্পর্কিত related

আমি এএসপি.এনইটি এমভিসি ব্যবহার করছি। গ্রেগ Brant থেকে ব্লগ পোস্ট আমার জন্য কাজ করেন। শেষ পর্যন্ত, আপনি একটি বৈশিষ্ট্য তৈরি করেন, আপনি [HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]নিয়ামক ক্রিয়ায় যুক্ত করতে সক্ষম হন।

উদাহরণ স্বরূপ:

public class HttpHeaderAttribute : ActionFilterAttribute
{
    public string Name { get; set; }
    public string Value { get; set; }
    public HttpHeaderAttribute(string name, string value)
    {
        Name = name;
        Value = value;
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.AppendHeader(Name, Value);
        base.OnResultExecuted(filterContext);
    }
}

এবং তারপরে এটি ব্যবহার করে:

[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
public ActionResult MyVeryAvailableAction(string id)
{
    return Json( "Some public result" );
}

1
ওয়েবএপি 2 এটি এখনই তৈরি করেছে। asp.net/web-api/overview/security/…
ম্যাট

10

যেমন ম্যাট মোম্ব্রেয়া সার্ভারের পক্ষে সঠিক, আপনি হোয়াটলিস্টিং প্রত্যাখ্যান করা অন্য কোনও সমস্যায় পড়তে পারেন।

আপনাকে আপনার ফোনগ্যাপ.প্লেস্টটি কনফিগার করতে হবে। (আমি ফোনগ্যাপের একটি পুরানো সংস্করণ ব্যবহার করছি)

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

প্রথমে সহায়তাকারী ফাইল> ফোনগ্যাপ.পিলিস্ট নির্বাচন করুন

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

তারপরে "এক্সটার্নাল হোস্টস" এর অধীনে

সম্ভবত " http://nqatolog.negroesquisso.pt " এর মান সহ একটি এন্ট্রি যুক্ত করুন, আমি * শুধুমাত্র ডিবাগিংয়ের উদ্দেশ্যে ব্যবহার করছি।

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


8

এটি এমন কোনও ব্যক্তির পক্ষে কার্যকর হতে পারে যার জন্য একটি রেফারারের 'www' এবং 'নন-ডাব্লু' উভয় সংস্করণের জন্য ব্যতিক্রম দরকার needs

 $referrer = $_SERVER['HTTP_REFERER'];
 $parts = parse_url($referrer);
 $domain = $parts['host'];

 if($domain == 'google.com')
 {
         header('Access-Control-Allow-Origin: http://google.com');
 }
 else if($domain == 'www.google.com')
 {
         header('Access-Control-Allow-Origin: http://www.google.com');
 }

অ্যাজুরের সাথে ACAO ত্রুটি সমাধানের জন্য আমাকে সঠিক দিকে অগ্রাহ্য করলেন। আমি গুগলড্রাইভের হোস্ট-নেম যুক্ত করে রেখেছি। URL- এর প্রয়োজন ব্যবহৃত কোনো googledrive না googledrive
Kildareflare

7

আমি এর একটি সহজ সমাধান দেব give আমার ক্ষেত্রে আমার কোনও সার্ভারে অ্যাক্সেস নেই। সেক্ষেত্রে অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্সকে মঞ্জুরি দেওয়ার জন্য আপনি নিজের গুগল ক্রোম ব্রাউজারে সুরক্ষা নীতি পরিবর্তন করতে পারেন । এটি খুব সহজ:

  1. একটি ক্রোম ব্রাউজার শর্টকাট তৈরি করুন
  2. শর্ট কাট আইকন -> বৈশিষ্ট্য -> শর্টকাট -> লক্ষ্য রাইট ক্লিক করুন

সহজ পেস্ট "C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security

অবস্থান পৃথক হতে পারে। এখন সেই শর্টকাটে ক্লিক করে ক্রোম খুলুন।


7

বিভিন্ন এপিআইয়ের সাথে কাজ করার সময় আমি কয়েকবার এটি চালিয়েছি। প্রায়শই একটি দ্রুত ফিক্স হ'ল "& কলব্যাক =?" একটি স্ট্রিং শেষে। কখনও কখনও অ্যাম্পারস্যান্ডের একটি অক্ষর কোড হতে হয়, এবং কখনও কখনও "?": "? কলব্যাক =?" ( jQuery এর সাথে Forecast.io API ব্যবহার দেখুন )


6

নিশ্চিত করুন যে আপনি আপনার টু এপিআই বেস URL টি যুক্ত করেছেন আপনি Chrome এক্সটেনশন এই ত্রুটি লেখার এবং পেতে থাকেন, তবে তারপর করা manifest.json'র অনুমতি ব্লক , উদাহরণস্বরূপ:

"permissions": [
    "https://itunes.apple.com/"
]

6

এটি একই-উত্স নীতির কারণেমোজিলা বিকাশকারী নেটওয়ার্ক বা উইকিপিডিয়াতে আরও দেখুন ।

মূলত, আপনার উদাহরণে আপনার http://nqatalog.negroesquisso.pt/login.phpকেবল পৃষ্ঠাটি লোড করা দরকার nqatalog.negroesquisso.pt, নয় localhost


1
তবে একটি মোবাইল ডিভাইস থেকে আমার ওয়েবসওয়ারটি লোড করা দরকার, আমি কি এটিকে বাইপাস করব?
রিকার্ডো

আচ্ছা আপনি jsonp কিছু সার্ভার সাইড পরিবর্তন বা ব্যবহার করতে হবে en.wikipedia.org/wiki/JSONP
antyrat

6

যদি আপনি অ্যাপাচি অধীনে থাকেন তবে এই বিষয়বস্তু দিয়ে কেবল আপনার ডিরেক্টরিতে একটি .htaccess ফাইল যুক্ত করুন:

Header set Access-Control-Allow-Origin: *

Header set Access-Control-Allow-Headers: content-type

Header set Access-Control-Allow-Methods: *

5

ইন পাগল নেভিগেশন রুবি , আপনি একটি নিয়ামক না করতে পারেন:

headers['Access-Control-Allow-Origin'] = '*'

এটি যদি কোন এজাক্স কল হয় তবে আপনি এটি নিয়ন্ত্রণ করতে পারেন? আমি কি আরও কোড প্রসঙ্গে দেখতে পারি?
rigdonmr

5

আপনি Access-Control-Allow-Origin: *HTTP অপশনগুলির প্রতিক্রিয়াগুলিতে শিরোনাম সহ ব্রোজার তৈরি করে সার্ভারটি সংশোধন না করে এটি কাজ করতে পারেন ।

ক্রোমে, এই এক্সটেনশনটি ব্যবহার করুন । আপনি যদি মজিলায় থাকেন তবে এই উত্তরটি পরীক্ষা করে দেখুন ।


5

যদি আপনি এটি Angular.js এ পেয়ে থাকেন তবে নিশ্চিত হয়ে নিন যে আপনি আপনার পোর্ট নম্বরটি এভাবে পালিয়ে গেছেন:

var Project = $resource(
    'http://localhost\\:5648/api/...', {'a':'b'}, {
        update: { method: 'PUT' }
    }
);

এটি আরও তথ্যের জন্য এখানে দেখুন ।


4

ক্রোমে পরীক্ষিত ফোনগ্যাপ অ্যাপ্লিকেশন নিয়েও আমাদের একই সমস্যা। ক্রোম খোলার আগে আমরা প্রতিদিন একটি ব্যাচ ফাইলের নীচে ব্যাচ ফাইল ব্যবহার করি windows এটি চালানোর আগে মনে রাখবেন আপনাকে টাস্ক ম্যানেজার থেকে ক্রোমের সমস্ত দৃষ্টান্ত পরিষ্কার করতে হবে বা পটভূমিতে না চলার জন্য আপনি ক্রোম নির্বাচন করতে পারেন।

ব্যাচ: (সিএমডি ব্যবহার করুন)

cd D:\Program Files (x86)\Google\Chrome\Application\chrome.exe --disable-web-security


0

আপনি যখন অনুরোধটি পাবেন তখন আপনি পারেন

var origin = (req.headers.origin || "*");

যখন আপনাকে প্রতিক্রিয়া জানাতে হবে তার চেয়ে এমন কিছু নিয়ে যান:

res.writeHead(
    206,
    {
        'Access-Control-Allow-Credentials': true,
        'Access-Control-Allow-Origin': origin,
    }
);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.