J'utilise Vue, Heroku et j'ai eu le même problème :
J'ai mis à jour mon server.js comme ci-dessous, et je n'y touche plus car il fonctionne :) :
const serveStatic = require('serve-static')
const sts = require('strict-transport-security');
const path = require('path')
var express = require("express");
require("dotenv").config();
var history = require("connect-history-api-fallback");
const app = express()
const globalSTS = sts.getSTS({'max-age':{'days': 365}});
app.use(globalSTS);
app.use(
history({
verbose: true
})
);
app.use((req, res, next) => {
if (req.header('x-forwarded-proto') !== 'https') {
res.redirect(`https://${req.header('host')}${req.url}`)
} else {
next();
}
});
app.use('/', serveStatic(path.join(__dirname, '/dist')));
app.get(/.*/, function (req, res) {
res.sendFile(path.join(__dirname, '/dist/index.html'))
})
const port = process.env.PORT || 8080
app.listen(port)
console.log(`app is listening on port: ${port}`)
8 votes
Le support Heroku a répondu à ma question ci-dessus, et je n'ai pas trouvé de réponse déjà postée ici, alors j'ai pensé la poster en public et partager les connaissances. Ils transmettent beaucoup d'informations sur la requête originale avec ses en-têtes de requête préfixés par un 'x-'. Voici le code que j'utilise actuellement (en haut de mes définitions de route) :
app.get('*',function(req,res,next){ if(req.headers['x-forwarded-proto']!='https') res.redirect('https://mypreferreddomain.com'+req.url) else next() })
1 votes
Ok j'ai compris que vous vérifiez pour https comme ça et redirigez si nécessaire. Mais y a-t-il un moyen de faire une redirection au niveau du DNS avec votre fournisseur de nom de domaine ? Ainsi, avant que le navigateur ne résolve le DNS, il est déjà en https. Parce qu'avec cette approche, je pense, étant donné ma connaissance des redirections, qu'une demande est faite sur http puis à nouveau sur https. Donc si des données sensibles ont été envoyées, elles ont été envoyées sur http une fois, puis sur https. Ce qui va à l'encontre du but recherché. S'il vous plaît laissez-moi savoir si je me trompe.
0 votes
@MuhammadUmer, votre raisonnement semble pointé du doigt ici, en avez-vous découvert davantage ?
0 votes
J'ai simplement utilisé cloudflare comme serveur de noms qui fonctionne comme nginx, et me permet de rediriger vers la version ssl juste en cliquant sur le bouton de basculement. vous pouvez également faire ceci : developer.mozilla.org/fr/US/docs/Web/HTTP/Headers/ De plus, généralement, personne n'envoie de données tout de suite, ils atterrissent généralement sur le formulaire puis le soumettent. Donc, côté serveur, le code, le serveur DNS, l'en-tête http, le javascript, vous pouvez vérifier et rediriger vers https. developer.mozilla.org/fr/US/docs/Web/HTTP/Redirections