Non utilizzare affatto JSONP - usa CORS.
JSONP è obsoleto ed è sempre stato più un hack di riempimento che una tecnologia ponderata per la condivisione delle risorse. L'alternativa moderna e ampiamente supportata è CORS (Cross-Origin Resource Sharing). Sarai sicuramente in grado di sostituire tutti i tuoi casi d'uso JSONP con esso.
Con CORS, non è più necessario avvolgere il tuo JSON in una funzione di callback (ad esempio cb({"foo": "bar"})
), ma conservalo così com'è. Invece, si invia un'intestazione Access-Control-Allow-Origin
per indicare al browser le origini a cui si desidera fornire l'accesso. Poiché ogni browser abilitato a CORS invia un'intestazione Origin
nelle loro richieste di origine incrociata, è possibile produrre dinamicamente l'intestazione ACAO, a seconda della provenienza della richiesta. Una volta consentito, il client sarà in grado di leggere il contenuto della risposta, indipendentemente dal tipo di contenuto. Quindi puoi semplicemente usare il normale JSON.
Esempio di richiesta di origine incrociata da supplicant.example
a un'API JSON in server.example
:
GET /foo.json HTTP/1.1
Host: server.example
...
Origin: https://supplicant.example
...
Risposta campione:
HTTP/1.1 200 OK
....
Access-Control-Allow-Origin: https://supplicant.example
Content-Type: application/json
...
{"foo": "bar"}
CORS non solo fornisce una maggiore sicurezza su JSONP, ma ti dà la possibilità di lavorare con metodi HTTP arbitrari ( PUT
, DELETE
, ecc.), puoi dare accesso a intestazioni particolari e molto altro ancora. Mozilla ha una eccellente introduzione a ciò che CORS può fare.