Errore cors Motivo: l’header “autorization” non è consentito a causa

di il
8 risposte

Errore cors Motivo: l’header “autorization” non è consentito a causa

Buona giornata

Utilizzando l'applicazione deployata su AWS con ubuntu 22.04, mi va ein errore Cors 

"Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da https://api.ghisellinimorenogm.it/sanfra/1. Motivo: l’header “autorization” non è consentito a causa dell’header “Access-Control-Allow-Headers” nella risposta CORS preliminare (“preflight”).																					

i comandi che vengono rifiutati con questo codice di errore, ho provato a eseguirli in Postman e funzzionano regolarmente.

Penso che il problema stia nei parametri Cors che ho impostato, ma non so come intervenire.

const express = require('express');
const bodyparser = require('body-parser');
const cors = require('cors');
const mysql = require('mysql2');

// porta per mysql
const ports = process.env.PORT || 3001;   // info relative all'ambiente di esecuzione

global.__basedir = __dirname;  // va aprendere la cartella corrente

// importo la connessione al db
const db = require('./db');
// ---------------------------------------------------  importo le rotte
const authRouter = require('./routers/api/auth');
......


 var corsOptions = {
  // per ambiente di produzione su AWS

   origin: "https://miosito.miodominio.it",
   credentials: "true",
   methods: "GET, POST, PUT, DELETE, OPTIONS",
   headers: "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,Origin,Options"
   
  }; 


const app = express();
// utilizzo i pacchetti
app.use(cors(corsOptions));
app.use(bodyparser.json());
app.use(express.json());
......

nella corsOptions mancano dei parametri o nellaa app.use(cors...    ) mancano dei parametri ?

Qualcuno sa come poterne uscire ?

Grazie

Moreno

8 Risposte

  • Re: Errore cors Motivo: l’header “autorization” non è consentito a causa

    19/02/2025 - morenog ha scritto:

    i comandi che vengono rifiutati con questo codice di errore [...]

    Se il messaggio di errore è copiato/incollato correttamente, direi che la parte sottolineata è abbastanza significativa:
    Motivo: l’header “autorization” non è consentito a causa dell’header “Access-Control-Allow-Headers” nella risposta CORS preliminare (“preflight”)

    Se l'header si chiama "autorization", in minuscolo e senza una "h", allora un errore potrebbe essere quello.

    19/02/2025 - morenog ha scritto:

    ho provato a eseguirli in Postman e funzzionano regolarmente

    E' ovvio: Postman non è un sito Web (o meglio, tecnicamente lo è, ma è un altro discorso). :)

    CORS è un meccanismo di sicurezza che riguarda essenzialmente i browser, e di cui nessuno si occupa fino a quando non si ritrova con un errore al momento del deploy in produzione, e da quel momento in poi cerca soluzioni rapide per ovviare all'aggirare l'errore nel fare la richiesta e ottenere la risposta.

    E' una situazione abbastanza classica e ricorrente (basta vedere quante domande su CORS ci sono su StackOverflow, tutte uguali) che ha una e una sola soluzione: capire che cos'è, perché esiste e come configurarlo nel modo corretto.

    Se si salta questo passaggio, prescindendo da quanto detto sopra, si espone il sito a problemi di sicurezza abbastanza importanti con ripercussioni anche gravi, soprattutto se il sito ospita anche dati di utenti.

    Non trascurarlo.

  • Re: Errore cors Motivo: l’header “autorization” non è consentito a causa

    Grazie Alka per la cortese risposta.

    il messaggio è stato copiaa incolla dalla console di firefox e quindi l'errore è di impostazione del parametro.

    Ma come ben vedi in corsOption su index.js è scritto "Authorization" e non "autorization"

    in /etc/nginx/sites-available   nel file backend non ci sono riferimenti a header

    
    server {
            root /var/www/backend/html;
    
            server_name api.miosito.it;
    
            location / {
                # reserve proxy
                proxy_pass http://localhost:3001;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Host $host:$server_port;
                proxy_cache_bypass $http_upgrade;
    
    
            }
    
    
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/api.miosito.it/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/api.miosito.it/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
    }
    
    
    
    
    
    server {
        if ($host = api.miosito.it) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
    
    
            listen 80;
    
            server_name api.miosito.it;
        return 404; # managed by Certbot
    
    
    }
    

    dove posso cercare questo "autorization" 

    è sicuramente un errore di scrittura, ma non ricordo dove altro cercare.

    Alka sei preziosissimo e non so come ringraziarti

    ciao

    Moreno

  • Re: Errore cors Motivo: l’header “autorization” non è consentito a causa

    19/02/2025 - morenog ha scritto:

    il messaggio è stato copiaa incolla dalla console di firefox e quindi l'errore è di impostazione del parametro.

    Ma come ben vedi in corsOption su index.js è scritto "Authorization" e non "autorization"

    Sì, infatti quell'header sbagliato "autorization" arriva dal client, e non è nemmeno tra gli header standard ed è diverso (correttamente) da quello che hai indicato in corsOptions.

    19/02/2025 - morenog ha scritto:

    dove posso cercare questo "autorization" 

    Sul codice del client (applicazione Web) che fa la richiesta al server.

  • Re: Errore cors Motivo: l’header “autorization” non è consentito a causa

    Grazie Alka per essermi vicino.

    Sto cercando di proseguire nella ricerca dell'errore. Ho visto, analizzando il log di PM2 vedo che cìè un errore legato alla connessione a mysql. Credo che l'errore 

    Motivo: l’header “autorization” non è consentito a causa dell’header “Access-Control-Allow-Headers” nella risposta CORS preliminare (“preflight”) sia errore di riflesso.

    su log pm2 mi viene evidenziato

    
    /home/ubuntu/.pm2/logs/Sif-error.log last 15 lines:
    0|Sif      | Warning: got packets out of order. Expected 21 but received 0
    0|Sif      | 2025-02-20T02:51:34.536Z MySQL error 4031
    0|Sif      | Ignoring invalid configuration option passed to Connection: idleTimeout. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection
    

    ho cercato su internet il problema segnalato 

    Warning: got packets out of order. Expected 21 but received 0
    0|Sif      | 2025-02-20T02:51:34.536Z MySQL error 4031

    e vedo che fanno riferimento ai parametri di mysql.createPool

    questo è il mio file db.js

    // definizioni del database   --  nuova versiona dal 24/11/2021   ----  su ambiente sviluppo  (bangia_test)
    const config = require("./config.json");
    const mysql = require('mysql2');
    // originale  per sviluppo su localhost
    const Sequelize = require('sequelize')
    const sequelize = new Sequelize(
       config.database,
       config.user,
       config.password,
     {
       host: config.host,
       dialect: config.dialect,
       operatorsAliases: 0,
       pool: {
         max: config.pool.max,
         min: config.pool.min,
         acquire: config.pool.acquire,
         idle: config.pool.idle
       }
     }
    );
    let db;
    
    //  ambiente di Produzione EC2
    
    if(process.env.CLEARDB_DATABASE_URL) {
     db = mysql.createConnection(process.env.CLEARDB_DATABASE_URL)
    } else {
       db = mysql.createPool({   
         connectionLimit: 100,
         host: config.host,
         user: config.user,
         password: config.password,
         database:config.database,
         port:config.port,
         waitForConnections: true,
         connectionLimit: 10,
         queueLimit: 0,
         debug: false
      });
    }
    
    
    // Attempt to catch disconnects
    db.on('connection', function (connection) {
      console.log('DB Connection correttamente aperta');
    
      connection.on('error', function (err) {
        console.error(new Date(), 'MySQL error', err.code);
      });
      connection.on('close', function (err) {
        console.error(new Date(), 'MySQL close', err);
      });
    
    });
    

    viene fatto anche un rilevo legato a idleTimeout ceh nella mia mysql.createPool non viene menzionata

    Ignoring invalid configuration option passed to Connection: idleTimeout. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection

    Credo che se si riesce a sistemare questo errore, tutto dovrebbe risolversi.

    Hai qualche idea su come gestire l'errore 

    /home/ubuntu/.pm2/logs/Sif-error.log last 15 lines:
    0|Sif      | Warning: got packets out of order. Expected 21 but received 0
    0|Sif      | 2025-02-20T02:51:34.536Z MySQL error 4031
    0|Sif      | Ignoring invalid configuration option passed to Connection: idleTimeout. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection

    la mysql.createPool è correttamente impostata ?

    Grazie

    Moreno

  • Re: Errore cors Motivo: l’header “autorization” non è consentito a causa

    20/02/2025 - morenog ha scritto:

    Sto cercando di proseguire nella ricerca dell'errore. Ho visto, analizzando il log di PM2 vedo che cìè un errore legato alla connessione a mysql. [...]

    Questo problema non ha nulla a che vedere con il problema di CORS.

    20/02/2025 - morenog ha scritto:

    Credo che se si riesce a sistemare questo errore, tutto dovrebbe risolversi.

    Io invece ribadisco che non ha nulla a che vedere con il problema che stiamo affrontando, e ne ho fornito svariati dettagli nelle risposte precedenti, ma tu prosegui la discussione evitando di "quotare" le mie risposte, non ponendo dubbi specifici su quanto ti viene detto, non seguendo i suggerimenti che ti vengono dati, non studiando quanto ti viene consigliato, non guardando dove ti viene indicato.

    In poche parole, ignori le risposte che ti vengono date, oppure leggi ma poi fai tue considerazioni su ciò che può essere l'origine del problema, e riproponi di nuovo le tue considerazioni a cui rispondo e a cui ti replichi aggiungendone altre.

    20/02/2025 - morenog ha scritto:

    Grazie Alka per essermi vicino.

    Mi piace dare una mano, ma se le persone a cui rispondo non mi considerano - e ne hanno tutta la libertà - io ovviamente smetto di rispondere perché non vedo l'utilità di perdere tempo in questo modo, detto francamente.

  • Re: Errore cors Motivo: l’header “autorization” non è consentito a causa

    Scusa Alka

    Non ho nessuna intenzione di mettere indiscussione la tua preziosa assistenza e sicuramente ho fatto qualcosa che può essere stato interpretato come poco rispettoso dei tuoi suggerimenti. Se hai ritenuto le mie risposte poco rispettose, ti chiedo scusa, ma non era assolutamente voluto. Pensavo potesse essere un contributo a cercare di trovare soluzione al problema. Ti chiedo ancora scusa. Sono alla disperata ricerca di trovare un motivo di tale strano comportamento. Guardando i log messi a disposizione del browser, vedo che cìè un comportamento davvero singolare.

    in questa pagina di elenco i dati sono visualizzati correttamente

    se pigio sul bottone "Giornate" la pagina di dettaglio è compilata parzialmente e presenta una segnalazzione d'errore

    se faccio diagnostica con tab Network mi da questo errore

    se eseguo con Postman la chiamata in errore https://api.ghisellinimorenogm.it/giornates/getAllGiornatebyManif/23 viene eseguita correttamente

    i parametri OptionCors che ho impostato in index.js mi sembrano corretti.

    Non so che altro cercare.

    Mi scuso ancora se sono stato male interpretato, ma le mie riposte erano indirzzate, oltre che a ringraziarti per il prezioso supporto e fonte di chiarimento, a cercare doi lavorare con te, in maniera condivisa, alla ricerca della soluzione al problema. Non sono molto esperto in questa parte e quindi mi scuso se posso essere stato interpretato come supponente, anzi sono solo alla ricerca di capire il problema per potermi muovere autonomamente.

    Grazzie ancora per il prezioso supporto.

    Ciao

    Moreno 

  • Re: Errore cors Motivo: l’header “autorization” non è consentito a causa

    Ciao Alka

    Poco dopo averti risposto, ho fatto una verifica sui service in cui preparo i metodi per le chiamate al backend. Mi sono accorto che in alcuni service scrivevo, a livello di headers, "authorization" e in altri "autorization".

    E' stata una svista davvero imperdonabile che mi ha fatto, e ti ha fatto perdere, tempo prezioso.

    Mai avrei pensato che fosse così banale.

    Mi domando però perchè in localhost non fosse mai emerso questo problema.

    Ora sembra funzionare. Ti ringrazio per la professionalità e la pazienza dimostrata.

    A conclusione di questa problematica, per cui ti sarò sempre grato, volevo chiederti perchè a livello di PM2 log viene evidenziato questo problema  

    Warning: got packets out of order. Expected 21 but received 0
    0|Sif      | 2025-02-20T02:51:34.536Z MySQL error 4031

    può creare problemi ?

    Grazie ancora per l'amicizia e la pazienza

    Moreno

  • Re: Errore cors Motivo: l’header “autorization” non è consentito a causa

    20/02/2025 - morenog ha scritto:

    Poco dopo averti risposto, ho fatto una verifica sui service in cui preparo i metodi per le chiamate al backend. Mi sono accorto che in alcuni service scrivevo, a livello di headers, "authorization" e in altri "autorization".

    Quando mi hai chiesto dove guardare, risposi 

    "Sul codice del client (applicazione Web) che fa la richiesta al server".

    La risposta te l'avevo fornita. :)

    20/02/2025 - morenog ha scritto:

    Mi domando però perchè in localhost non fosse mai emerso questo problema.

    Nella mia prima risposta ti ho sottolineato quanto è importante sapere cos'è CORS e come funziona.
    Avevo messo il link sulla parola CORS proprio perché porta alla documentazione relativa.
    Nella documentazione c'è scritto tutto. Porsi domande è lecito, però se non si approfondisce, rimarranno domande senza risposta. :)

    20/02/2025 - morenog ha scritto:

    E' stata una svista davvero imperdonabile che mi ha fatto, e ti ha fatto perdere, tempo prezioso.

    Le sviste capitano in qualsiasi momento e a chiunque (non ti dico poco fa su cosa ho letteralmente imprecato).
    Però appunto, proprio perché era abbastanza individuabile, secondo me bastava leggere bene le risposte successive.

    20/02/2025 - morenog ha scritto:

    Non sono molto esperto in questa parte e quindi mi scuso se posso essere stato interpretato come supponente, anzi sono solo alla ricerca di capire il problema per potermi muovere autonomamente.

    Nessuna supponenza. Non ti ho preso assolutamente come supponente, anzi.
    La mia era una constatazione pratica: non ce l'avevo con nessuno in particolare, ma riscontravo solo un'ovvietà riguardo all'inutilità di rispondere se i suggerimenti non vengono considerati, tutto qui. :)

    20/02/2025 - morenog ha scritto:

    A conclusione di questa problematica, per cui ti sarò sempre grato, volevo chiederti perchè a livello di PM2 log viene evidenziato questo problema  

    Questa in realtà è una problematica a parte, che non ha a che vedere con la prima, e andrebbe affrontata in una discussione separata e dedicata.

    Ciao!

Devi accedere o registrarti per scrivere nel forum
8 risposte