Ajax utilizzando https su una pagina http


101

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

Ora, vorrei fare tutte le chiamate ajax tramite https. (per favore non chiedermi perché :)) Quando sono su una pagina con protocollo https, le richieste ajax funzionano. Quando sono su una pagina con protocollo http, ricevo un errore javascript: Accesso a URI limitato negato

So che questo è un problema interdominio (in effetti, è un problema interprotocollo) 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 chiamo su una pagina che è stata servita tramite http. C'è qualche soluzione alternativa per raggiungere questo obiettivo (qualche soluzione json / proxy?) O è semplicemente impossibile?


4
Perché non abbinare l'ajax al protocollo della pagina di caricamento?
scheibk

45
Hanno detto specificamente "Per favore, non chiedermi perché".
Chris Moschini

Perché hai bisogno di AJAX con HTTPS però .....
Miglia

4
Ad esempio per un modulo di checkout più dinamico che si connette a un gateway di pagamento come PayPal in background in modo che le persone possano vedere cosa sta succedendo .. Solo una delle altre possibilità
Kentor

Risposte:



11

Prova JSONP.

la maggior parte delle librerie JS lo rendono facile come le altre chiamate AJAX, ma internamente usa un iframe per eseguire la query.

se non stai utilizzando JSON per il tuo payload, dovrai applicare il tuo meccanismo all'iframe.

personalmente, reindirizzerei semplicemente dalla pagina http: // a quella https: //


1
hmm ho provato jquery .ajax con jsonp: opzione "jsonp_callback" impostata, ma ancora lo stesso errore js.
user135863

forse devi aggiungere il parametro callback nell'URL
Javier

@ user135863 L'endpoint a cui stai inviando la query supporta JSONP in primo luogo?
Leigh Brenecki

1
Per il bene della mia sanità mentale, vado con la tua ultima opzione ... Reindirizzamento semplice ahttps:
Dzeimsas Zvirblis

9

http://example.com/ potrebbe risolversi in un VirtualHost diverso da https://example.com/ (che, poiché l'intestazione Host non viene inviata, risponde all'impostazione predefinita per quell'IP), quindi i due vengono trattati come separati domini e quindi soggetti a restrizioni JS crossdomain.

I callback JSON potrebbero consentirti di evitarlo.


link morto su callback JSON :(
Kubie

@Kubie Questa risposta ha dieci anni domani e i collegamenti interrotti sono il motivo per cui chiediamo che le domande includano informazioni sufficienti per sopravvivere a una.
ceejayoz

appena notato i 10 anni ha ... e sì, buon punto. Va bene,
cercherò di cercarlo su

4

Dai un'occhiata al progetto opensource Forge. Fornisce un'implementazione TLS JavaScript, insieme ad alcuni Flash per gestire le effettive richieste interdominio:

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

In breve, Forge ti consentirà di effettuare XmlHttpRequests da una pagina web caricata su http a un sito https. Sarà necessario fornire un file di criteri tra domini Flash tramite il server per abilitare le richieste tra domini. Dai un'occhiata ai post del blog alla fine del README per ottenere una spiegazione più approfondita di come funziona.

Tuttavia, devo 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 protetto, potrebbero essere compromessi. L'utilizzo più sicuro è caricarlo da un sito protetto e quindi utilizzarlo per accedere ad altri siti (sicuri o meno).


2

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


2
Dopo aver letto questo thread, rimango con JSONP dslreports.com/forum/r21425467-IFrame-With-HTTPS-on-HTTP-Page
JGFMK

Questo può essere fatto, ma assicurati di impostare le intestazioni P3P se hai bisogno di cookie di sessione dall'iFrame ... altrimenti MSE dirà "nu uh uh"
srquinn

2

Ecco cosa faccio:

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


Questo può essere fatto, ma assicurati di impostare le intestazioni P3P se hai bisogno di cookie di sessione dall'iFrame ... altrimenti MSE dirà "nu uh uh"
srquinn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.