Ajax utilizzando https su una pagina http

Il mio sito utilizza il protocollo http e https; non influisce sul contenuto. Il mio sito utilizza le chiamate jQuery ajax, che riempiono anche alcune aree della pagina.

Ora, mi piacerebbe fare tutte le chiamate Ajax su https. (per favore non chiedermi perché :)) Quando sono su una pagina con protocollo https, le richieste di ajax funzionano. Quando sono su una pagina con protocollo http, ottengo un errore javascript: accesso all’URI limitato negato

So che si tratta di un problema interdominio (in realtà, si tratta di un problema di protocollo incrociato) e so che dovrei usare lo stesso protocollo nelle chiamate Ajax come nella pagina corrente.

Tuttavia, voglio che tutte le chiamate ajax siano https e le chiamiamo su una pagina che è stata pubblicata su http. C’è qualche soluzione per ottenere questo (qualche soluzione json / proxy?), O è semplicemente imansible?

Aggiungi l’intestazione Access-Control-Allow-Origin dal server

Access-Control-Allow-Origin: https://www.mysite.com 

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

Prova JSONP.

la maggior parte delle librerie JS rende tutto più semplice delle altre chiamate AJAX, ma internamente usa un iframe per eseguire la query.

se non stai usando JSON per il tuo payload, dovrai far ruotare il tuo meccanismo attorno all’iframe.

personalmente, mi limito a redirect la pagina http: // a https: // uno

http://example.com/ può risolvere un VirtualHost diverso da https://example.com/ (che, come l’intestazione Host non viene inviata, risponde al valore predefinito per quell’IP), quindi i due vengono considerati come separati domini e quindi soggetti a restrizioni JS crossdomain.

I callback JSON potrebbero permetterti di evitarlo.

Controlla il progetto di Forza opensource. Fornisce un’implementazione TLS JavaScript, insieme ad alcuni Flash per gestire le effettive richieste tra domini:

http://github.com/digitalbazaar/forge/blob/master/README

In breve, Forge ti permetterà di creare XmlHttpRequests da una pagina web caricata su http in un sito https. Dovrai fornire un file di criteri dei domini Flash tramite il tuo server per abilitare le richieste tra domini. Dai un’occhiata ai post del blog alla fine del README per ottenere una spiegazione più approfondita su come funziona.

Tuttavia, dovrei menzionare che Forge è più adatto per le richieste tra due diversi domini https. Il motivo è che c’è un potenziale attacco MiTM. Se carichi JavaScript e Flash da un sito non sicuro potrebbe essere compromesso. L’uso più sicuro è caricarlo da un sito sicuro e quindi utilizzarlo per accedere ad altri siti (sicuri o meno).

Si potrebbe tentare di caricare la pagina https in un iframe e instradare tutte le richieste di ajax dentro / fuori dal frame tramite qualche bridge, si tratta di un hackaround ma potrebbe funzionare (non è sicuro se imporrà le stesse restrizioni di accesso dato il contesto sicuro) . In caso contrario, un proxy http locale per redirect le richieste (come qualsiasi chiamata interdominio) sarebbe la soluzione accettata.

Ecco cosa faccio:

Genera un iFrame nascosto con i dati che desideri pubblicare. Dal momento che controlli ancora quell’iFrame, la stessa origine non si applica. Quindi invia il modulo in quell’iFrame alla pagina ssl. La pagina ssl quindi reindirizza a una pagina non-ssl con messaggi di stato. Hai accesso a iFrame.