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


183

কোডের সাথে Weather.xsl নামে একটি এইচটিএমএল আউটপুট তৈরি করতে আমি একটি ছোট xslt ফাইল তৈরি করেছি:

<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="yweather"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <img src="{/*/*/item/yweather:condition/@text}.jpg"/>
</xsl:template>
</xsl:stylesheet>

আমি এইচটিএমএল আউটপুটে একটি এইচটিএমএল ফাইলের একটি ডিভের মধ্যে লোড করতে চাই যা আমি jQuery ব্যবহার করে চেষ্টা করে যাচ্ছি:

<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>

তবে আমি নিম্নলিখিত ত্রুটিটি পাচ্ছি: অ্যাসেস-কন্ট্রোল-মঞ্জুরি-উত্স দ্বারা অরিজিনাল নাল অনুমোদিত নয়।

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


এটি কি আপনার আসল load কল? এটির কোনও পথ নেই?
টিজে ক্রাউডার

উত্তর:


227

অরিজিনাল nullহ'ল স্থানীয় ফাইল সিস্টেম, যাতে এটি আপনাকে বোঝায় যে আপনি এইচটিএমএল পৃষ্ঠাটি লোড করছেন যা কোনও ইউআরএল loadমাধ্যমে কল করে file:///(যেমন, কেবলমাত্র একটি স্থানীয় ফাইল ব্রাউজারে এটির ডাবল-ক্লিক করা বা অনুরূপ) similar স্থানীয় ফাইলগুলিতে একই উত্স নীতি প্রয়োগ করার জন্য বিভিন্ন ব্রাউজারগুলি বিভিন্ন পদ্ধতি গ্রহণ করে।

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

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


1
আমি এটি আপলোড করার পরে আমি আর অরিজিনটি বাতিল করব না, তবে আমি এখনও "অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স দ্বারা অনুমোদিত নয়" পাচ্ছি।
ডুডলেডক

3
আপনি $('#result').load('weather.xsl');যে উত্সটি লোড করছেন তা যদি আপনি দেখানো ( ) এর মতো হয় তবে তা হওয়া উচিত নয়, কারণ অনুরোধটি স্পষ্টভাবে একই উত্সের। আপনি যদি অন্য কোথাও (যেমন, $('#result').load('http://somewhere.else/weather.xsl');) লোড করার চেষ্টা করছেন তবে আপনি আবার এসওপিতে চলেছেন, তবে অন্যভাবে। Ajax অনুরোধ একই সীমাবদ্ধ উৎপত্তি (উত্তর লিংকে দেখুন), অথবা আপনি একটি ব্যবহার করছেন যদি CORS -enabled ব্রাউজার এবং সার্ভার সমর্থন CORS, সার্ভার কিনা ক্রশ-অরিজিন অনুরোধটিকে মঞ্জুরি চয়ন করতে পারেন।
টিজে ক্রাউডার

আমি লোড url পরিবর্তন করেছি। প্রশ্নের যে কোনওটিতে এটি পরিবর্তন করা এটিকে লোড জরিমানা করে তোলে। সহায়তার জন্য ধন্যবাদ
ডুডলেডক

2
একটি সাধারণ ওয়েব সার্ভার সেট আপ করার সহজতম এবং দ্রুততম উপায় কী? আইআইএস কি এখানে সবচেয়ে সহজ উপায় হবে?
সায়রান গ্যালাগার

13
@ কায়ারাঞ্জ আমি python -m SimpleHTTPServerএকটি কমান্ড লাইন থেকে দৌড়ে এসে লোকালহোস্টে গিয়েছিলাম: 8000, আমার পক্ষে কাজ করেছিল। পাইথন ম্যাক ওএস এক্সের সাথে পূর্বনির্ধারিত আসে; অন্য কোনও ওএস ব্যবহার করে আপনাকে ইনস্টল করতে হতে পারে।
ডেভ লিপম্যান

216

স্থানীয় সংস্থানগুলি সহ ক্রোম এবং সাফারির অজ্যাক্স ব্যবহারের উপর বিধিনিষেধ রয়েছে। এ কারণেই এটি একটি ত্রুটি ছুঁড়ে দিচ্ছে

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

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

--allow-file-access-from-files

উপরের প্যারামিটারটি কীভাবে আপনার Chrome এ যুক্ত করতে হবে তার আরও তথ্য: আপনার টাস্ক বারের ক্রোম আইকনটিতে ডান ক্লিক করুন, পপ-আপ উইন্ডোতে Google Chrome- এ ডান ক্লিক করুন এবং বৈশিষ্ট্যগুলি ক্লিক করুন এবং শর্টকাট ট্যাবের নীচে টার্গেট পাঠ্যবক্সের ভিতরে উপরের প্যারামিটারটি যুক্ত করুন। এটি নীচের মত পছন্দ করবে;

C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

আশা করি এটি সাহায্য করবে!


19
ম্যাক ওএস এক্সে, আপনি টার্মিনালটি খোলার মাধ্যমে টাইপ করে এই বিকল্পটি দিয়ে Chrome শুরু করতে পারেন: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files & চূড়ান্ত নোট করুন এবং ঠিক তাই আপনি টার্মিনালটি ব্যবহার চালিয়ে যেতে পারেন এবং প্রয়োজন নেই required দ্রষ্টব্য: আপনি যদি টার্মিনালটি বন্ধ করেন তবে এটি ক্রোম উইন্ডোটি বন্ধ করবে।
ব্রুনো বার্নার্ডিনো

3
সমস্ত কি এবং বন্ধ এবং খোলার। এখনও যান না (এক্সপি তে ক্রোম 27.0.1453.116 মি)
এমপি্লুঞ্জন

আমি উইন্ডোজ 8 এর অধীনে এই প্যারামিটারটি যুক্ত করতে পারছি না ..., যে কেউ কীভাবে এটি করতে পারে জানেন? ...
মর্তি

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

যখন আমি লক্ষ্য পাতায় ফাইল-অ্যাক্সেস-থেকে-ফাইল-যুক্ত করার চেষ্টা করি তখন আমি একটি ".... অবৈধ" বার্তা পাই, এইচটি সমাধানটি কি এখনও বৈধ?
আলেক্স

48

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

python -m http.server  # with python3

অথবা

python -m SimpleHTTPServer  # with python2

সুতরাং যদি আপনার myfile.htmlকোনও ফোল্ডারে আপনার এইচটিএমএল ফাইল থাকে তবে বলুন mydir, আপনাকে যা করতে হবে তা হ'ল:

cd /path/to/mydir
python -m http.server  # or the python2 alternative above

তারপরে আপনার ব্রাউজারটিকে ইশারা করুন:

http://localhost:8000/myfile.html

এবং আপনি শেষ! ওয়েব সুরক্ষা অক্ষম না করে , স্থানীয় ফাইলগুলিকে মঞ্জুরি না দেওয়া, এমনকি কমান্ড লাইন বিকল্পের সাহায্যে ব্রাউজারটি পুনরায় চালু না করেই সমস্ত ব্রাউজারে কাজ করে ।


2
পাইথন 3 Windows এ সমতূল্য: পাইথন -m http.server [<PORTNO>]
Aragorn

পাইথন 3: পাইথন 3-মি HT.server
নুনস

লিনাক্সে পাইথন 2, 8080 বন্দরটি বেছে নিন (বা অন্য কোনও আপনি চান):python -m SimpleHTTPServer 8080
রডরিগো

2

আমি এই নমুনাভাবে যোগ করতে চাই যে এই এসও উত্স অনুসারে: https://stackoverflow.com/a/14671362/1743693 , এই ধরণের সমস্যা এখন কেবলমাত্র নিম্নোক্ত jQuery নির্দেশাবলী ব্যবহার করে আংশিকভাবে সমাধান করা হয়েছে:

<script> 
    $.support.cors = true;
</script>

আমি এটি IE10.0.9200 এ চেষ্টা করেছি এবং এটি অবিলম্বে কাজ করেছে (jquery-1.9.0.js ব্যবহার করে)।

28.0.1500.95 ক্রোমে - এই নির্দেশনাটি কার্যকর হয় না ( উপরের লিঙ্কে মন্তব্যগুলিতে ডেভিড অভিযোগ করার সাথে সাথে এটি ঘটে যায়)

ফাইলগুলি থেকে ফাইল-অ্যাক্সেস-অ্যাক্সেস-সহ ক্রোম চালানো আমার পক্ষে কার্যকর হয়নি (উপরে মাইস্তোরার দাবি হিসাবে)


2

ব্যবহারের জন্য গোখানের সমাধানটি ব্যবহার করতে কিছুটা যুক্ত করা:

--allow-file-access-from-files

এখন আপনার কেবল স্থানের পরে লক্ষ্য পাঠ্যের উপরের পাঠ্য সংযোজন করতে হবে। উপরের সম্পত্তি যুক্ত করার পরে আপনি ক্রোম ব্রাউজারের সমস্ত দৃষ্টান্ত বন্ধ করে রেখেছেন তা নিশ্চিত করুন। আপনি যেখানে এই সম্পত্তি যুক্ত করেছেন সেই আইকন দ্বারা এখন ক্রোম পুনরায় চালু করুন। এটা সবার জন্য কাজ করা উচিত।


ঘোড়া ট্যাঙ্ক প্যারামিটারটি ইতিমধ্যে উপস্থাপন করেছিল এবং এই পরামিতিটি দিয়ে কীভাবে ব্রাউজারটি সর্বদা শুরু করা যায় তা সন্ধানের অংশ নয়। অতিরিক্ত হিসাবে, আপনি ধরে নিতে পারবেন না যে সবাই মাইক্রোসফ্ট উইন্ডোজ ব্যবহার করে।
jnns

0

আমি একটি স্থানীয় এইচটিএমএল ফাইল থেকে একটি সার্ভারের জন্য এক্সএইচআর অনুরোধ করার সমাধান খুঁজছিলাম এবং Chrome এবং পিএইচপি ব্যবহার করে একটি সমাধান খুঁজে পেয়েছি। (কোনও জ্যাকুয়ারি নেই)

JavaScripts:

var x = new XMLHttpRequest(); 
if(x) x.onreadystatechange=function(){ 
    if (x.readyState === 4 && x.status===200){
        console.log(x.responseText); //Success
    }else{ 
        console.log(x); //Failed
    }
};
x.open(GET, 'http://example.com/', true);
x.withCredentials = true;
x.send();

আমার ক্রোমের অনুরোধ শিরোনাম Origin: null

আমার পিএইচপি প্রতিক্রিয়া শিরোনাম (দ্রষ্টব্য যে 'নাল' একটি স্ট্রিং )। HTTP_REFERER দূরবর্তী সার্ভার থেকে অন্যটিতে ক্রস-উত্সের অনুমতি দেয়।

header('Access-Control-Allow-Origin: '.(trim($_SERVER['HTTP_REFERER'],'/')?:'null'),true);
header('Access-Control-Allow-Credentials:true',true);

আমি সফলভাবে আমার সার্ভারের সাথে সংযোগ করতে সক্ষম হয়েছি। আপনি শংসাপত্রের শিরোনামগুলি উপেক্ষা করতে পারেন, তবে এটি অ্যাপাচি AuthType Basicসক্ষম করে নিয়ে আমার পক্ষে কাজ করে

আমি এফএফ এবং অপেরার সাথে সামঞ্জস্যতা পরীক্ষা করেছি, এটি অনেক ক্ষেত্রে যেমন কাজ করে:

কোনও ভিএম ল্যান আইপি (192.168.0.x) থেকে ফিরে ভিএম'এস ওয়ানের (সর্বজনীন) আইপি: পোর্টটিতে
একটি ভিএম ল্যান আইপি থেকে কোনও রিমোট সার্ভার ডোমেন নামেই ফিরে আসে।
একটি স্থানীয় .HTML ফাইল থেকে ভিএম ল্যান আইপি এবং / অথবা ভিএম ডাব্লু আইএন আইপি: পোর্ট,
একটি স্থানীয় .এইচটিএমএল ফাইল থেকে একটি রিমোট সার্ভার ডোমেন নাম।
ইত্যাদি।


0

আপনি file:/উত্স ট্যাগ ব্যবহার করে একটি স্থানীয় জাভাস্ক্রিপ্ট ফাইল (আপনার উত্স পৃষ্ঠার নীচে গাছের মধ্যে ) লোড করতে পারেন :

<script src="my_data.js"></script>

আপনি যদি নিজের ইনপুটটিকে জাভাস্ক্রিপ্টে এনকোড করেন তবে এই ক্ষেত্রে:

mydata.js :

$xsl_text = "<xsl:stylesheet version="1.0" + ....

(এটি জাসনের পক্ষে সহজ) তবে জাভাস্ক্রিপ্টের বৈশ্বিক ভেরিয়েবলটিতে আপনার ইচ্ছামত ব্যবহার করার জন্য আপনার 'ডেটা' রয়েছে।

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