জাভাস্ক্রিপ্ট AJAX ক্রস-ডোমেন পোস্ট রিমোট অ্যাক্সেসের সহজ বাস্তবায়নের সমস্যা
মুক্তির তারিখ:2022/11/12 11:06আসলে, সমস্যাটি খুবই সহজ। আপনি অনুরোধটি পোস্ট করতে পারেন, এবং সার্ভারও একটি প্রতিক্রিয়া প্রদান করে। এটি আধুনিক ব্রাউজারগুলির নিরাপত্তা ব্যবস্থা যা স্থানীয় জাভাস্ক্রিপ্টকে প্রতিক্রিয়া প্রক্রিয়াকরণ থেকে বাধা দেয়। ডিবাগ কনসোল দেখায়:
Origin 'null' থেকে 'https://ip.taotu.org/'-এ XMLHttpRequest-এ অ্যাক্সেস CORS নীতি দ্বারা অবরুদ্ধ করা হয়েছে: অনুরোধ করা সংস্থানে কোনও 'অ্যাক্সেস-কন্ট্রোল-অ্যালো-অরিজিন' শিরোনাম নেই।
সমস্যা হল যদি আপনি একটি স্থানীয় পৃষ্ঠা পোস্ট করেন, তাহলে ব্রাউজার স্বয়ংক্রিয়ভাবে একটি শিরোনাম যোগ করবে, মূল: নাল, এবং যদি সার্ভার প্রতিক্রিয়া শিরোনাম যোগ না করে Access-Control-Allow-Origin: * প্রতিক্রিয়া ফেরত দেওয়ার সময়, বা হেডার সার্ভার দ্বারা প্রত্যাবর্তিত মান আপনার মতই একই যদি প্রেরিত শিরোনামের মূলটি মেলে না, ব্রাউজার ক্লায়েন্ট প্রক্রিয়াকরণের জন্য প্রতিক্রিয়া ডেটা জাভাস্ক্রিপ্টে হস্তান্তর করবে না, ফলে একটি ত্রুটি হবে।
সমাধান: আসলে, এটি খুবই সহজ, সার্ভারের ব্যাক-এন্ড কোড, আমাদের শুধুমাত্র পোস্ট ডেটাতে নির্দিষ্ট তথ্য (আমাদের নিজস্ব পাসওয়ার্ডের সমতুল্য) রয়েছে কিনা তা পরীক্ষা করতে হবে, যদি হ্যাঁ, অ্যাক্সেস-কন্ট্রোল-অনুমতি-অরিজিন যোগ করুন: *, যাতে ক্লায়েন্টকে সঠিকভাবে পরিচালনা করা যায়।
সারাংশ হল যে AJAX ক্রস-ডোমেন অনুরোধগুলি ডিফল্টরূপে অনুমোদিত নয়, এবং ব্রাউজার তাদের নিষিদ্ধ করবে৷ সার্ভার পরিস্থিতিটি প্রয়োজনীয় কিনা তা বিচার করে, এবং একটি অ্যাক্সেস-কন্ট্রোল-অনুমতি-অরিজিন:* প্রতিক্রিয়া শিরোনাম প্রদান করে এবং এটি ঠিক আছে৷
পৃষ্ঠার জাভাস্ক্রিপ্ট কোড অনুরোধ করুন:
var xhttp = নতুন XMLHttpRequest();
xhttp.onreadystatechange = ফাংশন () {
যদি (এই। রেডিস্টেট == 4 && এই। স্ট্যাটাস == 200) {
document.getElementById("queryipinfo").innerHTML =
এই. প্রতিক্রিয়া পাঠ্য;
}
};
xhttp.open("POST", "https://ip.taotu.org", সত্য);
xhttp.send('XX আসে রিমোট রিকোয়েস্ট XX'+ipdomain থেকে); //কী কোড দ্বারা যুক্ত করা পূর্ববর্তী স্ট্রিং আমাদের নিজস্ব পাসওয়ার্ডের সমতুল্য
সার্ভার-সাইড প্রসেসিং কোড:
স্ট্রীম oPostData = অনুরোধ। InputStream;
বাইট[] bPostByte=নতুন বাইট[oPostData.Length];
oPostData.Read(bPostByte, 0, (int)oPostData.Length);
স্ট্রিং sPostIPDomain=Encoding.UTF8.GetString(bPostByte);
bool bFromRemote;
যদি (sPostIPDomain.StartsWith("XX রিমোট রিকোয়েস্ট XX থেকে আসে")) //কী কোড
{
bFromRemote=true;
sPostIPDomain = Regex.Replace(sPostIPDomain,"XX রিমোট রিকোয়েস্ট XX(*), "$1" থেকে আসে;
*********বাদ দেওয়া কোড********
if (bFromRemote) // হেডার ফেরত দিতে হবে কিনা তা বিচার করার জন্য কী কোড
Response.AddHeader("Access-Control-Allow-Origin", "*"); //কী কোড
যাইহোক, স্বাভাবিক সমাধান হল অ্যাক্সেস-কন্ট্রোল-অ্যালো-অরিজিন সেট করা: * সার্ভার রেসপন্স হেডারে সমস্ত ক্রস-ডোমেন অনুরোধের অনুমতি দিতে, অথবা অ্যাক্সেস-কন্ট্রোল-অ্যালো-অরিজিন: https://taotu.org অনুমতি দিতে নির্দিষ্ট ডোমেন দ্বারা প্রেরিত অনুরোধটি স্বাভাবিক নেটওয়ার্ক বিকাশের দ্বারা ব্যবহৃত হয়, তবে যদি প্রয়োজন হয় যে বাড়িতে স্থানীয়ভাবে পাঠানো অনুরোধ ডোমেনটি একটি আইপি ঠিকানা, এবং এটি একটি নির্দিষ্ট আইপি নয়, এটি দীর্ঘ সময়ের জন্য সমাধান করা যাবে না, তাই আমি এই সহজ সমাধান ব্যবহার করেছি।
আমার উদ্দেশ্য হল বাড়িতে স্থানীয় কম্পিউটারের ব্রাউজারে একটি স্ট্যাটিক .html ফাইল সেট করা এবং এটিকে ডিফল্ট হোমপেজ হিসাবে সেট করা। আমি যতবার ব্রাউজার খুলি, আমি জাভা-এর মাধ্যমে রিমোট সার্ভারে একটি পোস্টের অনুরোধ পাঠাই এবং আমার ফেরত পাঠাই। বাহ্যিক নেটওয়ার্ক আইপি এবং এটি প্রদর্শন করুন। স্ট্যাটিক পৃষ্ঠায় আমার প্রায়শই ব্যবহৃত কিছু ওয়েবসাইট লিঙ্ক রয়েছে, পাশাপাশি একটি থ্রি-ইন-ওয়ান সার্চ ইঞ্জিন রয়েছে।
এটি আমার তৈরি একটি ছোট ওয়েবপেজ, দেখার জন্য স্বাগত জানাই বা হোমপেজ হিসেবে সেট করুন: https://ip.taotu.org
ব্যবহারকারীর মন্তব্য
নতুন মন্তব্য যোগ করুন