নিরাপত্তাহীন প্রতিক্রিয়া বা সংযোগ অস্বীকারের কারণে এজাক্স কল ব্যর্থ হয়েছে কিনা তা নির্ধারণ করুন


115

আমি প্রচুর গবেষণা করে চলেছি এবং এটি পরিচালনা করার উপায় খুঁজে পাইনি। আমি একটি কাস্টম স্বাক্ষরিত শংসাপত্রের সাথে জেটি চলমান একটি https সার্ভার থেকে একটি লোকাহোস্ট https সার্ভারে একটি jQuery আজাক্স কল করার চেষ্টা করছি। আমার সমস্যাটি হ'ল আমি নির্ধারণ করতে পারি না যে প্রতিক্রিয়াটি কোনও সংযোগ অস্বীকার করেছে বা কোনও অনিরাপদ প্রতিক্রিয়া (শংসাপত্রের স্বীকৃতির অভাবে)। উভয় পরিস্থিতিতে পার্থক্য নির্ধারণ করার উপায় আছে? responseTextএবং statusCodeসবসময় উভয় ক্ষেত্রেই একই, যদিও ক্রোম কনসোলে আমি একটি পার্থক্য দেখতে পারেন:

net::ERR_INSECURE_RESPONSE
net::ERR_CONNECTION_REFUSED

responseTextstatusCodeউভয় ক্ষেত্রে সর্বদা "" এবং সর্বদা "0" থাকে।

আমার প্রশ্ন হ'ল, আমি কীভাবে নির্ধারণ করতে পারি যে কোনও jQuery আজাক্স কল কারণে ERR_INSECURE_RESPONSEবা কারণে ব্যর্থ হয়েছে ERR_CONNECTION_REFUSED?

শংসাপত্রটি স্বীকৃত হয়ে গেলে সবকিছু ঠিকঠাক হয়ে যায়, তবে আমি জানতে চাই যে লোকালহোস্ট সার্ভারটি বন্ধ হয়ে গেছে, বা এটি চালু এবং চলছে তবে শংসাপত্রটি এখনও স্বীকৃত হয়নি।

$.ajax({
    type: 'GET',
    url: "https://localhost/custom/server/",
    dataType: "json",
    async: true,
    success: function (response) {
        //do something
    },
    error: function (xhr, textStatus, errorThrown) {
        console.log(xhr, textStatus, errorThrown); //always the same for refused and insecure responses.
    }
});

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

এমনকি ম্যানুয়ালি অনুরোধ সম্পাদন করেও আমি একই ফল পেয়েছি:

var request = new XMLHttpRequest();
request.open('GET', "https://localhost/custom/server/", true);
request.onload = function () {
    console.log(request.responseText);
};
request.onerror = function () {
    console.log(request.responseText);
};
request.send();

6
আমি আমার কোড পোস্ট করব, তবে এটি জাভাস্ক্রিপ্ট কোড ত্রুটি নয়। দয়া করে আমার প্রশ্নটি মনোযোগ সহকারে পড়ুন।
ট্যাক্সিকালা

1
অন্যান্য দুটি ত্রুটি কলব্যাক আর্গুমেন্টগুলি কি কোনও অতিরিক্ত অন্তর্দৃষ্টি দেয়? function (xhr, status, msg) {...আমি সন্দেহ করি তারা করবে, কিন্তু চেষ্টা করার মতো।
কেভিন বি

2
কোন সার্ভার থেকে অন্য সার্ভারে। জেটি সার্ভার (লোকাহোস্টে চলছে) সঠিকভাবে CORS শিরোনাম সেট করেছে কারণ আমি একবার শংসাপত্রটি গ্রহণ করলে সবকিছু প্রত্যাশা অনুযায়ী কাজ করে। আমি শংসাপত্র গ্রহণ করতে হবে বা জেটি ডাউন আছে কিনা তা নির্ধারণ করতে চাই।
ট্যাক্সিচালা

5
এটি সম্পূর্ণভাবে সম্ভব যে ব্রাউজার থেকে তথ্যের অভাব পুরোপুরি ইচ্ছাকৃত। কেবলমাত্র একটি "ত্রুটি" প্রস্তাবিত হ্যাকারকে কিছু পরিমাণ তথ্য সরবরাহ করবে, যেমন। "এই সিস্টেমে বন্দর ইত্যাদিতে কিছু শোনা যায়" "
কাতানা 314

1
এটি আমি চাই এমন কিছু নয়, এটি এমন কিছু যা আমি বিকাশ করছি তার নকশা এবং প্রকৃতির দ্বারা আমার প্রয়োজন। সার্ভার সাইড কোনও বিকল্প নয়।
taxicala

উত্তর:


67

নতুন ওয়েব ব্রাউজারগুলি থেকে এটি আলাদা করার কোনও উপায় নেই।

ডাব্লু 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টার্মিনালে (উবুন্টু উদাহরণ)।


6
এটি এখন পর্যন্ত সবচেয়ে সম্পূর্ণ উত্তর। এটি দেখায় যে আপনি আসলে কিছু গবেষণা কাজ এবং পরীক্ষা করেছেন testing আমি দেখতে পাচ্ছি যে আপনি এটি সম্পাদন করার জন্য প্রতিটি সম্ভাব্য উপায়ে চেষ্টা করেছেন এবং সমস্ত পরিস্থিতি সত্যই ভালভাবে ব্যাখ্যা করেছেন। আপনি দ্রুত পরীক্ষার পরিবেশ স্থাপনের জন্য উদাহরণ কোডও সরবরাহ করেছেন! সত্যিই ভাল কাজ! অন্তর্দৃষ্টি জন্য ধন্যবাদ!
ট্যাকিশালা

দুর্দান্ত উত্তর! তবে আমি উল্লেখ করতে চাই যে স্বতঃ স্বাক্ষরিত শংসাপত্রগুলি পৃথক সার্ভার থেকে থাকলে কোনও ব্রাউজার থেকে ত্রুটি তৈরি করে। @ কেরিরিজো
ফেব্রিসিও

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

32

এখন হিসাবে: ব্রাউজারগুলির মধ্যে এই ইভেন্টের পার্থক্য করার কোনও উপায় নেই। ব্রাউজারগুলি যেমন বিকাশকারীদের অ্যাক্সেসের জন্য কোনও ইভেন্ট সরবরাহ করে না। (জুলাই ২০১৫)

এই উত্তরটি কেবল সম্ভাব্য, অ্যালবাইট হ্যাকি এবং অসম্পূর্ণ, সমাধানের জন্য ধারণা সরবরাহ করতে চায়।


দাবি অস্বীকার : এই উত্তরটি অসম্পূর্ণ কারণ এটি সম্পূর্ণরূপে ওপি-র সমস্যাগুলি সমাধান করে না (ক্রস-আদি নীতিগুলির কারণে)। তবে ধারণাটি নিজেই কিছু যোগ্যতা রয়েছে যা আরও প্রসারিত করেছে: @ আর্টুর গ্রিজসিয়াক, এখানে একটি প্রক্সি এবং এজাক্স ব্যবহার করে।


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

আমার গবেষণার সাধারণ sensক্যমত্য হচ্ছে যে এসএসএল শংসাপত্রগুলি ব্রাউজার দ্বারা পরিচালিত হয়, সুতরাং ব্যবহারকারী দ্বারা স্ব-স্বাক্ষরিত শংসাপত্র গ্রহণ না করা অবধি ব্রাউজারটি স্থিতির কোড সহ সমস্ত অনুরোধ লক করে দেয়। কোনও সুরক্ষিত প্রতিক্রিয়ার জন্য ব্রাউজারটি তার নিজস্ব স্থিতি কোডটি আবার প্রেরণ করতে পারে (তবে কোড করা হয়েছে) তবে এটি আসলে কিছুই সাহায্য করে না এবং তারপরেও আপনার ব্রাউজারের সামঞ্জস্যতা (ক্রোম / ফায়ারফক্স / আইই) এর বিভিন্ন মান রয়েছে issues .. আরেকবার)

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

isUp = false;
isAccepted = false;

var isUpRequest = new XMLHttpRequest();
isUpRequest.open('GET', "http://localhost/custom/server/", true); //note non-ssl port
isUpRequest.onload = function() {
    isUp = true;
    var isAcceptedRequest = new XMLHttpRequest();
    isAcceptedRequest.open('GET', "https://localhost/custom/server/", true); //note ssl port
    isAcceptedRequest.onload = function() {
        console.log("Server is up and certificate accepted");
        isAccepted = true;
    }
    isAcceptedRequest.onerror = function() {
        console.log("Server is up and certificate is not accepted");
    }
    isAcceptedRequest.send();
};
isUpRequest.onerror = function() {
    console.log("Server is down");
};
isUpRequest.send();

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


7
আমি পুরো উত্তরটি পড়েছি এবং আমার মনে হয় না এটি কার্যকর হবে। আমার উভয় সার্ভারই ​​এইচটিটিপিএস চলছে, যার অর্থ এই মুহুর্তে আমি এইচটিটিপি সার্ভারের জন্য একটি অনুরোধ ফায়ার করব, ব্রাউজারটি এখনই এটি বাতিল করে দেবে, কারণ আপনি এইচটিটিপিএস সার্ভার থেকে এইচটিটিপি সার্ভারে
অ্যাজাক্স

11

@ শুল্টজির উত্তরটি খুব কাছের, তবে স্পষ্টভাবে http- সাধারণভাবে - httpsব্রাউজারের পরিবেশে কাজ করবে না ।

আপনি যা করতে পারেন তা হ'ল আপনার পক্ষ থেকে অনুরোধ করার জন্য একটি মধ্যবর্তী সার্ভার (প্রক্সি) ব্যবহার করা। প্রক্সিটি হয় হয় উত্স httpথেকে অনুরোধ ফরোয়ার্ড করার httpsবা স্ব-স্বাক্ষরিত উত্স থেকে সামগ্রী লোড করার অনুমতি দেয় ।

যথাযথ শংসাপত্রের সাথে আপনার নিজস্ব সার্ভার থাকা সম্ভবত আপনার ক্ষেত্রে একটি ওভারকিল - আপনি স্ব-স্বাক্ষরিত শংসাপত্রের সাথে মেশিনের পরিবর্তে এই সেটিংটি ব্যবহার করতে পারেন - তবে সেখানে প্রচুর বেনামে খোলা প্রক্সি পরিষেবা রয়েছে।

সুতরাং আমার মনে যে দুটি পন্থা আসে তা হ'ল:

  1. এজাক্স অনুরোধ - এই জাতীয় ক্ষেত্রে প্রক্সিটিকে উপযুক্ত সিওআরএস সেটিংস ব্যবহার করতে হবে
  2. একটি iframe ব্যবহার - আপনি প্রক্সি মাধ্যমে একটি iframe ভিতরে আপনার স্ক্রিপ্ট (সম্ভবত html মধ্যে মোড়ানো) লোড করুন। স্ক্রিপ্টটি লোড হয়ে গেলে এটি এতে একটি বার্তা প্রেরণ করে .parentWindow। যদি আপনার উইন্ডোটি কোনও বার্তা পেয়ে থাকে তবে আপনি নিশ্চিত হতে পারেন যে সার্ভারটি চলছে (বা আরও স্পষ্টভাবে দ্বিতীয়টির আগে একটি ভগ্নাংশ চলছিল)।

আপনি যদি কেবল আপনার স্থানীয় পরিবেশে আগ্রহী হন তবে আপনি --disable-web-securityপতাকা সহ ক্রোম চালানোর চেষ্টা করতে পারেন ।


আরেকটি পরামর্শ: আপনি কি আরও তথ্য উপস্থিত রয়েছে কিনা তা জানতে অগ্রগতিমূলকভাবে কোনও চিত্র লোড করার চেষ্টা করেছিলেন?


1

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

if (jqXHR.status == 501) {
//insecure response
} else if (jqXHR.status == 102) {
//connection refused
}

এটি এজাক্সটি করার মতোই আমি এটি করছি, তবে এক জায়গায় ত্রুটির প্রতিক্রিয়াগুলিকে কেন্দ্রিয় করে তুলছি।
ট্যাকিশালা

1
মুল বক্তব্যটি হ'ল এজ্যাক্স কল করার সময় শংসাপত্রটি লোড হয় না বলে মনে হয় এটি সমস্যা। কোনও উপায় উত্তর
সন্ধানে চমকপ্রদ

2
না, সমস্যাটি হ'ল আমি শংসাপত্রটি গ্রহণ করা এবং সার্ভারটি বন্ধ আছে কিনা তা জানার মধ্যে পার্থক্যটি নির্ধারণ করতে চাই।
taxicala

1
উভয়ই সংযোগ অস্বীকার করা হয়েছে এবং শংসাপত্রটি বিশ্বাসযোগ্য না হলে, আমি একই উত্তর পেয়েছি jqXHR.status = 0 (এবং jqXHR.readyState = 0), এই উত্তরটিতে বর্ণিত QXHR.status == 102 বা 501 নয়।
শে

1

দুর্ভাগ্যক্রমে বর্তমান ব্রাউজার এক্সএইচআর এপিআই যখন "সুরক্ষিত প্রতিক্রিয়া" এর কারণে ব্রাউজারটি সংযোগ দিতে অস্বীকার করে এবং যখন এটি ওয়েবসাইটের এইচটিটিপি / এসএসএল শংসাপত্রকে বিশ্বাস করে না তখন তার সুস্পষ্ট ইঙ্গিত দেয় না।

তবে এই সমস্যাটির চারপাশে উপায় রয়েছে।

ব্রাউজারটি যখন এইচটিটিপি / এসএসএল শংসাপত্রকে বিশ্বাস করে না তা নির্ধারণ করার জন্য একটি সমাধান আমি এনেছি, প্রথমে কোনও এক্সএইচআর ত্রুটি ঘটেছে কিনা তা সনাক্ত করতে হবে ( error()উদাহরণস্বরূপ jQuery কলব্যাক ব্যবহার করে ), তারপরে XHR কলটি কোনও 'https- এ আছে কিনা তা পরীক্ষা করে দেখুন is : // 'ইউআরএল, এবং তারপরে এক্সএইচআর readyState0 হয় কিনা তা পরীক্ষা করুন , যার অর্থ XHR সংযোগ এমনকি খোলা হয়নি (ব্রাউজার শংসাপত্র পছন্দ না করলে যা হয় তা হয়)।

আমি এখানে এটি কোডটি এখানে রাখছি: https://github.com/maratbn/RainbowPayPress/blob/e9e9472a36ced747a0f9e5ca9fa7d96959aeaf8a/rainbopaypress/js/le_requirejs/public/model_info__transsdd888


1

আমি মনে করি না এই ত্রুটি বার্তাগুলি সনাক্ত করার একটি উপায় বর্তমানে রয়েছে তবে আপনি যে হ্যাক করতে পারেন তা হ'ল আপনার অ্যাপ্লিকেশন সার্ভারের সামনে এনগিনেক্সের মতো একটি সার্ভার ব্যবহার করা, যাতে অ্যাপ্লিকেশন সার্ভারটি ডাউন থাকলে আপনি একটি খারাপ হন 502স্টেটাস কোড সহ এনগিনেক্স থেকে গেটওয়ে ত্রুটি যা আপনি জেএসে সনাক্ত করতে পারেন। অন্যথায়, যদি শংসাপত্রটি অবৈধ হয় তবে আপনি একই জেনেরিক ত্রুটিটি পাবেন statusCode = 0

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