اذهب إلى المحتوى

السؤال

نشر

لقد قمت بإنشاء السيرفر الخاص بي وإستخدام HTTPS بنجاح ولكن حينما يحاول المستخدم الإتصال بالسيرفر من خلال بروتوكول HTTP لا يتم الأمر بنجاح أريد تحويل أي إتصال للسيرفر من بروتوكول HTTP إلى HTTPS

هذا هو الكود الذي أستخدمه

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);

حينما يأتي طلب إلى السيرفر بإستخدام الرابط

https://127.0.0.1:3000/

يكون الرد كما هو متوقع "hello world"
ولكن حينما يأتي الطلب إلى السيرفر بإستخدام رابط لا يحتوي على بروتوكول HTTPS على سبيل المثال  "http:127.0.0.1/3000" تحدث المشكله ولا يتم إرسال الرد بالشكل الصحيح.

فكيف يمكنني حل هذه المشكله بتحويل كافة الطلبات إلى HTTPS

Recommended Posts

  • 0
نشر

يمكنك عمل إعادة تحويل للاتصالات الواردة عبر بروتوكول HTTP وتحويلها ل HTTPS:

res.writeHead(301, { 
	"Location": "https://" + req.headers['host'].replace(http_port,https_port) + req.url 
});

باستخدام الطريقة السابقة سنقوم بعمل إعادة توجيه لنفسنا ولكن بتغغير البروتوكول، فعليا إعادة استدعاء الرابط بغير بروتوكول

سنقوم بوضع الشيفرة السابقة ضمن مخدم HTTP في التطبيق الذي مهمته فقط إعادة التوجيه:


https.createServer(options, function (req, res) {
    res.end('نجاح!');
}).listen(443);

// إعادة توجيه من http port 80 to https 

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(301, { "Location": "https://" + req.headers['host'].replace(http_port,https_port) + req.url });
    res.end();
}).listen(80);

 

  • 0
نشر

يمكنك إستخدام الكود السابق للمدرب وائل

أويمكنك بإستخدام express عمل تحويل بكل سهولة بإستخدام هذا الكود

var http = express();

/*
تحويل المسار من
http
الى
https
*/
http.get('*', function(req, res) {  
    res.redirect('https://' + req.headers.host + req.url);

    //أو يمكنك إستخدام هذا الكود وإضافة اسم الدومين يدويا
    // res.redirect('https://example.com' + req.url);
})


http.listen(8080);

أو يمكن استخدام هذا الكود في مايسمى بال middleware 

app.get('/', function(req, res, next) {
    if (req.protocol == 'http') {
        res.redirect('https://' + 
        req.get('host') + req.originalUrl);
    }
});

أما إذا أردت عدم إستخدام express الذي تسهل عليك الكثير فيمكنك إستخدام هذا الكود

var https = require('https');

var fs = require('fs');
var options = {
    key: fs.readFileSync('./key.pem'),
    cert: fs.readFileSync('./cert.pem')
};
/*
إنشاء خادم
https
*/
https.createServer(options, function (req, res) { 
    res.end('secure!');
}).listen(443);

/*
تحويل من
http
الى
https
*/
var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url });
    res.end();
}).listen(80);

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...