নতুন ওয়েব ব্রাউজারগুলি থেকে এটি আলাদা করার কোনও উপায় নেই।
ডাব্লু 3 সি স্পেসিফিকেশন:
সাধারণ ক্রস-অরিজিন অনুরোধের জন্য ব্যবহারকারী এজেন্টদের কী করা উচিত নীচের পদক্ষেপগুলি বর্ণনা করে :
অনুরোধের পদক্ষেপগুলি প্রয়োগ করুন এবং অনুরোধ করার সময় নীচের অনুরোধের নিয়মগুলি পর্যবেক্ষণ করুন।
যদি ম্যানুয়াল পুনর্নির্দেশ পতাকাটি সেট না করা থাকে এবং প্রতিক্রিয়াটির 301, 302, 303, 307 বা 308 এর HTTP স্থিতি কোড রয়েছে
তবে পুনঃনির্দেশ পদক্ষেপগুলি প্রয়োগ করুন।
যদি শেষ ব্যবহারকারী অনুরোধটি বাতিল করে দেয়
তবে গর্ভপাতের পদক্ষেপগুলি প্রয়োগ করুন।
যদি কোনও নেটওয়ার্ক ত্রুটি
হয় ডিএনএস ত্রুটির ক্ষেত্রে, টিএলএস আলোচনার ব্যর্থতা বা অন্য ধরণের নেটওয়ার্ক ত্রুটির ক্ষেত্রে, নেটওয়ার্ক ত্রুটি পদক্ষেপগুলি প্রয়োগ করুন । কোনও প্রকারের শেষ ব্যবহারকারীর ইন্টারঅ্যাকশনটির জন্য অনুরোধ করবেন না।
দ্রষ্টব্য: এটিতে HTTP প্রতিক্রিয়াগুলি অন্তর্ভুক্ত নয় যা কিছু ধরণের ত্রুটি যেমন HTTP স্থিতি কোড 410 নির্দেশ করে।
অন্যথায়
একটি উত্স ভাগ করে নেওয়ার চেক সম্পাদন করুন। যদি এটি ব্যর্থ হয়, তবে নেটওয়ার্ক ত্রুটির পদক্ষেপগুলি প্রয়োগ করুন। অন্যথায়, যদি এটি পাস ফিরে আসে, তবে এই অ্যালগরিদমটি বন্ধ করুন এবং ক্রস-অরিজিনের অনুরোধের স্থিতিকে সাফল্যে সেট করুন। অনুরোধটি আসলে শেষ করবেন না।
আপনি যেমন পড়তে পারেন, নেটওয়ার্ক ত্রুটির মধ্যে HTTP প্রতিক্রিয়া অন্তর্ভুক্ত নয় যা ত্রুটিগুলি অন্তর্ভুক্ত করে, এজন্য আপনি সর্বদা 0 স্থিতি কোড হিসাবে এবং "" ত্রুটি হিসাবে পাবেন।
উৎস
দ্রষ্টব্য : নীচের উদাহরণগুলি গুগল ক্রোম সংস্করণ 43.0.2357.130 ব্যবহার করে এবং এমন একটি পরিবেশের বিরুদ্ধে তৈরি করা হয়েছিল যা আমি ওপি এক অনুকরণ করতে তৈরি করেছি। সেট আপ করার কোডটি উত্তরের নীচে রয়েছে।
যদিও আমি এই পদ্ধতির আশেপাশে কাজ করার জন্য এইচটিটিপিএসের পরিবর্তে এইচটিটিপিএসের পরিবর্তে এই উত্তর হিসাবে একটি গৌণ অনুরোধ করা হবে তবে আমি মনে করেছি এটি সম্ভব নয় যে ব্রাউজারগুলির নতুন সংস্করণগুলি মিশ্র সামগ্রীকে ব্লক করে।
এর অর্থ হ'ল যদি আপনি এইচটিটিপিএস এবং বিপরীতে ব্যবহার করেন তবে ওয়েব ব্রাউজারটি HTTP- র মাধ্যমে কোনও অনুরোধের অনুমতি দেয় না।
কয়েক বছর আগে থেকে এটি এরকমই হয়েছে তবে মোজিলা ফায়ারফক্সের মতো পুরানো ওয়েব ব্রাউজারের সংস্করণগুলি এর 23 সংস্করণগুলিতে এটির অনুমতি দেয়।
এটি সম্পর্কে প্রমাণ:
HTTPS usign ওয়েব ব্রাউজার কনসোল থেকে একটি HTTP অনুরোধ করা
var request = new XMLHttpRequest();
request.open('GET', "http://localhost:8001", true);
request.onload = function () {
console.log(request.responseText);
};
request.onerror = function () {
console.log(request.responseText);
};
request.send();
নিম্নলিখিত ত্রুটির ফলাফল হবে:
মিশ্র সামগ্রী: ' https: // লোকালহোস্ট: 8000 / ' পৃষ্ঠার পৃষ্ঠাটি এইচটিটিপিএস -এর মাধ্যমে লোড করা হয়েছিল, তবে একটি অনিরাপদ এক্সএমএলএইচটিপিআরকোয়েস্ট শেষ পয়েন্ট ' http: // লোকালহোস্ট: 8001 / ' অনুরোধ করেছে। এই অনুরোধটি অবরুদ্ধ করা হয়েছে; লিখিত সামগ্রীটি অবশ্যই HTTPS এর মাধ্যমে পরিবেশন করা উচিত।
আপনি যদি ইফ্রাম যোগ করার মতো অন্যান্য উপায়ে এটি করার চেষ্টা করেন তবে একই ত্রুটি ব্রাউজার কনসোলে উপস্থিত হবে।
<iframe src="http://localhost:8001"></iframe>
সকেট সংযোগ ব্যবহার করেও একটি উত্তর হিসাবে পোস্ট করা হয়েছিল, আমি যথেষ্ট নিশ্চিত যে ফলাফলটি একই / অনুরূপ হবে তবে আমি এটি চেষ্টা করে দেখেছি।
ওয়েব ব্র্রোজার থেকে এইচটিটিপিএস ব্যবহার করে কোনও সুরক্ষিত সকেট সমাপ্তি বিন্দুতে সকেট সংযোগটি খোলার চেষ্টা মিশ্রিত সামগ্রীর ত্রুটির মধ্যে শেষ হবে।
new WebSocket("ws://localhost:8001", "protocolOne");
1) মিশ্র সামগ্রী: ' https: // লোকালহোস্ট: 8000 / ' পৃষ্ঠার পৃষ্ঠাটি এইচটিটিপিএস -এর মাধ্যমে লোড করা হয়েছিল, তবে এটি অনিরাপদ ওয়েবস্কট এন্ডপয়েন্ট 'ডাব্লুএস: // লোকালহোস্ট: 8001 /' এর সাথে সংযোগ স্থাপনের চেষ্টা করেছিল। এই অনুরোধটি অবরুদ্ধ করা হয়েছে; এই শেষ পয়েন্টটি অবশ্যই ডাব্লুএসএস-এর মাধ্যমে উপলব্ধ।
2) আনকচড ডোমেক্সেপশন: 'ওয়েবসকেট' তৈরি করতে ব্যর্থ: এইচটিটিপিএস-এর মাধ্যমে লোড হওয়া পৃষ্ঠা থেকে একটি সুরক্ষিত ওয়েবস্কট সংযোগ আরম্ভ করা যাবে না।
তারপরে আমি একটি ডাব্লুএসএস এর শেষ পয়েন্টের সাথে সংযোগ স্থাপনের চেষ্টা করেছি এবং দেখুন যদি আমি নেটওয়ার্ক সংযোগ ত্রুটি সম্পর্কে কিছু তথ্য পড়তে পারি:
var exampleSocket = new WebSocket("wss://localhost:8001", "protocolOne");
exampleSocket.onerror = function(e) {
console.log(e);
}
সার্ভারের সাথে উপরের স্নিপেট কার্যকর করা ফলাফল এতে বন্ধ করে দিয়েছে:
'ডাব্লুএসএস: // লোকালহোস্ট: 8001 /' এর সাথে ওয়েবস্কুট সংযোগ ব্যর্থ হয়েছে: সংযোগ স্থাপনে ত্রুটি: নেট :: ERR_CONNECTION_REFUSED
সার্ভার চালু করে উপরে স্নিপেট চালু করা হচ্ছে
'ডাব্লুএসএস: // লোকালহোস্ট: 8001 /' এর সাথে ওয়েবস্কট সংযোগ ব্যর্থ হয়েছে: ওয়েবসকেট খোলার হ্যান্ডশেক বাতিল করা হয়েছে
তবে আবারও, ত্রুটিটি যে কনসোলকে "অনারার ফাংশন" আউটপুট দেয় অন্যটির একটি ত্রুটি আলাদা করতে কোনও টিপ নেই।
এই উত্তরের পরামর্শ হিসাবে একটি প্রক্সি ব্যবহার করা কাজ করতে পারে তবে কেবল "টার্গেট" সার্ভারের সর্বজনীন অ্যাক্সেস থাকলে।
এখানে এটি ছিল না, সুতরাং এই দৃশ্যে একটি প্রক্সি বাস্তবায়নের চেষ্টা আমাদের একই সমস্যার দিকে নিয়ে যাবে।
নোড.জেএস এইচটিটিপিএস সার্ভার তৈরি করার কোড :
আমি দুটি নোডেজ এইচটিটিপিএস সার্ভার তৈরি করেছি যা স্ব স্বাক্ষরিত শংসাপত্রগুলি ব্যবহার করে:
targetServer.js:
var https = require('https');
var fs = require('fs');
var options = {
key: fs.readFileSync('./certs2/key.pem'),
cert: fs.readFileSync('./certs2/key-cert.pem')
};
https.createServer(options, function (req, res) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
res.writeHead(200);
res.end("hello world\n");
}).listen(8001);
applicationServer.js:
var https = require('https');
var fs = require('fs');
var options = {
key: fs.readFileSync('./certs/key.pem'),
cert: fs.readFileSync('./certs/key-cert.pem')
};
https.createServer(options, function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
এটিকে কাজ করার জন্য আপনার নোডেজ ইনস্টল থাকা দরকার, প্রতিটি সার্ভারের জন্য পৃথক শংসাপত্র তৈরি করতে হবে এবং সেটিকে ফোল্ডার শংসাপত্র এবং সার্টিটি 2 তে সংরক্ষণ করতে হবে।
এটি চালানোর জন্য কেবল চালানো node applicationServer.js
এবং node targetServer.js
টার্মিনালে (উবুন্টু উদাহরণ)।