Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 12584|Risposta: 0

[Jquery] JSONP - Risoluzione del problema dell'accesso cross-domain in Ajax

[Copiato link]
Pubblicato su 28/12/2015 14:22:00 | | |

Non scrivo un saggio da molto tempo, e mi sembra sempre di non avere tempo, ma in realtà il tempo è... Basta sciocchezze, qualche giorno fa c'era un nuovo requisito in operazione, che richiedeva alla pagina front-end di chiamare il metodo backend Webservice in modo asincrono per restituire informazioni. Ci sono molti modi per implementarlo, questo esempio usa jQuery+Ajax, dopo il completamento tutto va bene per il debug locale, ma c'è un problema dopo il deployment sul server e la chiamata di servizio in background non risponde, cosa sta succedendo? Il codice non è cambiato molto, l'unica cosa che è cambiata è l'indirizzo URL nel metodo ajax di jQuery. Potrebbe essere che il problema qui sia che, dopo aver verificato e fatto debug, si scopre che la policy omologa è la colpa, sappiamo che Javascrip{filtering}t o jQuery è una tecnica di scripting dinamico spesso usata nello sviluppo front-end web. In Javascrip{filtering}t, esiste una importante limitazione di sicurezza nota come "Politica di Stessa Origine". Questa politica impone una restrizione importante sul contenuto della pagina a cui il codice Javascrip{filter}t può accedere, cioè Javascrip{filtering}t può accedere solo a contenuti con lo stesso nome di dominio del documento o dello script che lo contiene. Gli script di domini diversi non possono accedersi tra loro, nemmeno ai sottodomini. Per quanto riguarda la strategia omologa, i lettori possono spiegarla più dettagliatamente su Baidu, cosa che non verrà ripetuta qui.



Ma a volte è inevitabile eseguire operazioni cross-domain, e la "politica omologa" è una limitazione, cosa dovremmo fare? Diamo un'occhiata a come viene implementato il JSONP cross-domain e discutiamo il principio del JSONP cross-domain.



Qui viene menzionato JSONP, poi qualcuno ha chiesto: qual è la differenza e la differenza tra questo e JSON, diamo un'occhiata, l'Enciclopedia Baidu ha la seguente spiegazione:

JSON (Javascrip{filtering}t Object Notation) è un formato di scambio dati leggero. Si basa su un sottoinsieme di Javascrip{filter}t (Standard ECMA-262 3ª Edizione - dicembre 1999). JSON utilizza un formato di testo completamente indipendente dal linguaggio, ma utilizza anche abitudini simili alla famiglia C (inclusi C, C++, C#, Java, Javascrip, Perl, Python, ecc.). Queste caratteristiche rendono JSON un linguaggio ideale per lo scambio di dati. Facile da leggere e scrivere dagli esseri umani, ma anche facile da analizzare e generare dalla macchina (trasmissione rapida su rete).

JSONP (JSON con riempimento) è un "modello d'uso" di JSON, che può essere utilizzato per risolvere il problema dell'accesso ai dati cross-domain nei browser mainstream. A causa della politica dello stesso tipo, le pagine generalmente situate su server1.example.com non possono comunicare con server che non sono server1.example.com, ad eccezione dell'elemento <scrip{filter}t> di HTML. Utilizzando questa strategia aperta dell'elemento <scrip{filter}t>, le pagine web possono ottenere dati JSON generati dinamicamente da altre fonti, e questo modello d'uso è noto come JSONP. I dati catturati con JSONP non sono JSON, ma un Javascrip{filter}t arbitrario, che viene eseguito con il traduttore Javascrip{filter}t invece di essere analizzato dal parser JSON.



A questo punto, va compreso che JSON è un formato di scambio dati leggero, come xml, che viene usato per descrivere i dati tra dati. JSONP è un modo per utilizzare i dati JSON e, invece di restituire un oggetto JSON, è uno script javascrip{filtering}t che contiene un oggetto JSON.



Quindi, come funziona JSONP? Sappiamo che, a causa delle limitazioni della politica di origine dello stesso tipo, XmlHttpRequest permette solo richieste di risorse dalla fonte corrente (nome di dominio, protocollo, porta). Le richieste cross-domain non sono possibili per motivi di sicurezza, ma abbiamo scoperto che quando i file js vengono chiamati su pagine web, non sono influenzati dal cross-domain o meno, e i tag con l'attributo "src" hanno capacità cross-domain, come <scrip{filter}t>, <img>, ,<iframe>Se vuoi fare una richiesta cross-domain, fai una richiesta cross-domain usando il tag scrip{filter}t di html, e restituisci il codice scrip{filtering}t da eseguire nella risposta, in cui puoi usare direttamente JSON per passare l'oggetto javascrip{filter}t. Cioè, generare dati JSON sul server cross-domain e poi incapsularli in uno script scrip{filtering}t, che supera i limiti della politica di origine stessa e risolve il problema dell'accesso cross-domain.

Diamo un'occhiata a come ottenerlo:

Codice front-end:






Precedente:Valori delegati tra forme di Winform
Prossimo:Avvia più servizi Memcached nello stesso computer Windows
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com