Tengo un back-end Express realmente simple con sesión express y quiero hacer una solicitud de origen cruzado. Mi back-end está alojado en mi local: http://localhost:8080 y mi front-end está alojado en https://example.com (con SSL). Cuando realicé una solicitud GET de https://example.com a http://localhost:8080, la sesión no se guardó, pero cuando realicé una solicitud de http://localhost:8081 a http://localhost:8080 (con mi front-end implementado localmente sin SSL) funciona
¿Cómo puedo solucionar este problema con el front-end alojado en mi dominio?
back-end:
var express = require('express'); var session = require('express-session'); var app = express(); app.use(function (req, res, next) { res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Origin', req.headers.origin); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'); if ('OPTIONS' == req.method) { res.send(200); } else { next(); } }); app.use(session({secret: "thisismysecrctekeyfhrgfgrfrty84fwir767", cookie: {httpOnly: true} })); app.set("trust proxy", 1); app.disable('etag'); // Status app.get('/auth', function (req, res) { console.log(req.session) if(!req.session.key) { req.session.key = 2; req.session.save() res.send('<html>COOKIE just saved</html>'); } else res.send('<html>COOKIE saved</html>'); }); app.listen(8080, function () { console.log('Auth listening on port 8080!') });Interfaz:
<html> <script src='https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js'></script> <script type='text/javascript'> const instance = axios.create({withCredentials: true}); instance.get('http://localhost:8080/auth').then(function (response) {console.log(response.data);}) </script> </html>Podemos ver una diferencia con los encabezados de las cookies, pero es el mismo código de front-end y el mismo back-end, solo cambia el host. Se pasa una cookie cuando el front-end está en local, no cuando está alojado con un dominio:
Información de red alojada en el front-end del dominio : Información de red alojada en el front-end del dominio
Front-end local de información de red : Front-end local de información de red
Estoy usando el proxy CloudFlare
¡Muchas gracias!