2015-10-16 16 views
5

Sto cercando di ottenere una richiesta AJAX che funzioni tra il mio browser e un server Apache (residente in un dominio diverso) usando CORS.CORS non funziona su Chrome/Firefox e Apache

Al lato server, ho fatto le seguenti modifiche nella sezione httpd.conf del server secondo le risposte in "Header set Access-Control-Allow-Origin in .htaccess doesn't work":

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

mia chiamata AJAX è della forma:

 $.ajax({ 
      url  :'https://x.x.x.x/validateCustomerID', 
      type  : 'POST', 
      cache : false, 
      crossDomain: true, 
      contentType: 'application/json', 
      beforeSend: function(xhr){ 
        xhr.setRequestHeader("Access-Control-Allow-Methods","POST"); 
        xhr.setRequestHeader("Access-Control-Allow-Headers","X-Requested-With"); 
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
      }, 
      data  : {loginId : '12345'}, 
      success : function(response){console.log("Success"+JSON.stringify(response))}, 
      error  : function(response){console.log("Error"+JSON.stringify(response))} 
     }); 
    } 

Ho anche provato a commentare outSend() per evitare una richiesta di preflight ma non ha avuto esito positivo neanche.

I messaggi di errore che ricevo su Chrome e Firefox sono:

  • In Chrome:

"XMLHttpRequest non può caricare https://x.x.x.x/validateCustomerID 'Access-Control-Allow-Origin' Nessuna intestazione è presente. sulla risorsa richiesta. L'origine 'null' non è quindi consentita l'accesso.La risposta aveva il codice di stato HTTP 403. "

  • In Firefox:

"Richiesta Cross-Origin bloccati: La stessa politica di origine non consente la lettura della risorsa remota a https://x.x.x.x/validateCustomerID.. (Motivo: richiesta CORS non)"

Non ci sono intestazioni di risposta ricevute dal server nel mio browser che ritengo siano obbligatorie per CORS per funzionare e anche i registri nel server non mostrano alcuna richiesta che lo raggiunga dal mio browser.

Sarei davvero grato se qualcuno qui può aiutarmi a risolvere questo problema perché sono bloccato da alcuni giorni e ho utilizzato quasi tutti i metodi di hit e di prova per far funzionare questa cosa.

+0

Hai attivare le intestazioni dei moduli di Apache 'headers' a2enmod ? –

+0

Perché stai provando a impostare le intestazioni di Access-Control nella ** richiesta **? – Quentin

+0

@Jacob, ho provato ad attivare le intestazioni dei moduli apache usando il comando head2enmod ma mi ha dato un errore che si trattava di un comando non valido. Poi ho letto da qualche parte che Mod_headers è abilitato di default in Apache quindi l'ho lasciato così com'è. Potrebbe essere un problema? –

risposta

1

Questa è la mia messa a punto in site.conf che opera nella produzione ora con apache2

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Headers "authorization, origin, user-token, x-requested-with, content-type" 
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

per un riferimento futuro vi consiglio vivamente di memorizzare questo sito http://enable-cors.org/index.html

+0

Ho effettivamente eseguito lo stesso collegamento durante l'impostazione delle impostazioni di Apache. Tuttavia, nell'ultimo punto in cui è necessario eseguire 'a2enmod headers', ho ricevuto un errore che diceva che si tratta di un comando non valido. Non l'ho provato ulteriormente poiché è stato appena scritto sopra che mod_headers era abilitato di default in Apache. –

+0

L'errore che hai nella tua domanda indica che le intestazioni non sono state effettivamente aggiunte alla risposta, hai riavviato apache? stai usando apache2? – maurycy

+0

è sicuro di fare *? non possiamo semplicemente fare '" https://cdnurl.com "'? – runningmark

Problemi correlati