Aggiunta del supporto CORS alle distribuzioni API
Scopri come utilizzare un criterio di richiesta per aggiungere il supporto CORS alle distribuzioni API con il gateway API.
I browser Web in genere implementano un "criterio della stessa origine" per impedire al codice di effettuare richieste contro un'origine diversa da quella da cui è stato servito il codice. L'intenzione della politica della stessa origine è quella di fornire protezione da siti web dannosi. Tuttavia, il criterio same-origin può anche impedire interazioni legittime tra un server e client di un'origine nota e affidabile.
CORS (Cross-Origin Resource Sharing) è uno standard di condivisione cross-origin per semplificare i criteri same-origin consentendo al codice su una pagina Web di utilizzare un'API REST servita da un'origine diversa. Lo standard CORS utilizza intestazioni di richiesta HTTP aggiuntive e intestazioni di risposta per specificare le origini a cui è possibile accedere.
Lo standard CORS richiede inoltre che per alcuni metodi di richiesta HTTP la richiesta sia "pre-volo". Prima di inviare la richiesta effettiva, il browser Web invia una richiesta pre-volo al server per determinare se i metodi nella richiesta effettiva sono supportati. Il server risponde con i metodi che consentirà in una richiesta effettiva. Il browser Web invia la richiesta effettiva solo se la risposta del server indica che i metodi nella richiesta effettiva sono consentiti. Lo standard CORS consente inoltre ai server di comunicare ai client se le richieste possono includere credenziali (cookie, intestazioni di autorizzazione o certificati client TLS).
Per ulteriori informazioni su CORS, consulta le risorse disponibili online, incluse quelle provenienti da W3C e Mozilla.
Il servizio Gateway API consente di abilitare il supporto CORS nelle API distribuite nei gateway API. Quando si abilita il supporto CORS in una distribuzione API, le richieste pre-volo HTTP e le richieste effettive alla distribuzione API restituiscono una o più intestazioni di risposta CORS al client API. Impostare i valori dell'intestazione di risposta CORS nella specifica di distribuzione API.
I criteri di richiesta vengono utilizzati per aggiungere il supporto CORS alle API (vedere Aggiunta di criteri di richiesta e di risposta alle specifiche di distribuzione delle API). È possibile applicare un criterio di richiesta CORS a livello globale a tutti gli instradamenti in una specifica di distribuzione API o solo a determinati instradamenti.
È possibile aggiungere un criterio di richiesta CORS a una specifica di distribuzione API effettuando le operazioni riportate di seguito.
- utilizzo di Console
- modifica di un file JSON
Utilizzo della console per aggiungere i criteri di richiesta CORS
Per aggiungere un criterio di richiesta CORS a una specifica di distribuzione API utilizzando la console, effettuare le operazioni riportate di seguito.
-
Creare o aggiornare una distribuzione API utilizzando la console, selezionare l'opzione Crea distribuzione e immettere i dettagli nella pagina Informazioni di base.
Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un Gateway API mediante la creazione di una distribuzione API e Aggiornamento di un Gateway API.
-
Nella sezione Criteri richieste API della pagina Informazioni di base, selezionare il pulsante Aggiungi accanto a CORS e specificare quanto segue.
-
Origini: un'origine a cui è consentito accedere alla distribuzione API. Ad esempio,
https://oracle.com. Selezionare Altra origine per immettere la seconda origine e le origini successive. -
Metodi: uno o più metodi consentiti nella richiesta effettiva alla distribuzione API. Ad esempio,
GET, PUT. -
Intestazioni: facoltativamente, un'intestazione HTTP consentita nella richiesta effettiva alla distribuzione dell'API. Ad esempio,
opc-request-idoIf-Match. Selezionare Altra intestazione per immettere la seconda e le intestazioni successive. -
Intestazioni esposte: facoltativamente, un'intestazione HTTP a cui i client API possono accedere nella risposta della distribuzione API a una richiesta effettiva. Ad esempio,
ETagoopc-request-id. Selezionare Altra intestazione per immettere la seconda e le intestazioni successive. -
Età massima in secondi: facoltativamente, un valore intero che indica per quanto tempo (in secondi delta) i risultati di una richiesta preliminare possono essere inseriti nella cache da un browser. Se non si specifica un valore, l'impostazione predefinita è
0. - Abilita credenziali di autorizzazione: indica se la richiesta effettiva alla distribuzione dell'API può essere effettuata utilizzando le credenziali (cookie, intestazioni di autorizzazione o certificati client TLS). Per impostazione predefinita, questa opzione non è selezionata.
Per informazioni su come i diversi campi del criterio di richiesta CORS vengono mappati su intestazioni di risposta CORS diverse, vedere Modalità di mapping di un criterio di richiesta CORS a una risposta CORS.
-
Origini: un'origine a cui è consentito accedere alla distribuzione API. Ad esempio,
-
Selezionare Aggiorna.
-
Selezionare Avanti per specificare le opzioni di autenticazione nella pagina Autenticazione.
Per ulteriori informazioni sulle opzioni di autenticazione, vedere Aggiunta di autenticazione e autorizzazione alle distribuzioni API.
-
Selezionare Successivo per immettere i dettagli dei singoli instradamenti nella distribuzione API nella pagina Cicli. Per specificare i criteri di richiesta CORS che si applicano a un singolo instradamento, selezionare Mostra criteri di richiesta instradamento, selezionare il pulsante Aggiungi accanto a CORS e specificare:
-
Origine: un'origine a cui è consentito accedere all'instradamento. Ad esempio,
https://oracle.com. Selezionare Altra origine per immettere la seconda origine e le origini successive. -
Metodi: uno o più metodi consentiti nella richiesta effettiva all'instradamento. Ad esempio,
GET, PUT. -
Intestazioni: facoltativamente, un'intestazione HTTP consentita nella richiesta effettiva all'instradamento. Ad esempio,
opc-request-idoIf-Match. Selezionare Altra intestazione per immettere la seconda e le intestazioni successive. -
Intestazioni esposte: facoltativamente, un'intestazione HTTP a cui i client API possono accedere nella risposta della distribuzione API a una richiesta effettiva. Ad esempio,
ETagoopc-request-id. Selezionare Altra intestazione per immettere la seconda e le intestazioni successive. -
Età massima in secondi: facoltativamente, un valore intero che indica per quanto tempo (in secondi delta) i risultati di una richiesta preliminare possono essere inseriti nella cache da un browser. Se non si specifica un valore, l'impostazione predefinita è
0. - Abilita credenziali di autorizzazione: indica se la richiesta effettiva all'instradamento può essere effettuata utilizzando le credenziali (cookie, intestazioni di autorizzazione o certificati client TLS). Per impostazione predefinita, questa opzione non è selezionata.
Per informazioni su come i diversi campi del criterio di richiesta CORS vengono mappati su intestazioni di risposta CORS diverse, vedere Modalità di mapping di un criterio di richiesta CORS a una risposta CORS.
-
Origine: un'origine a cui è consentito accedere all'instradamento. Ad esempio,
- Selezionare Aggiorna, quindi Avanti per esaminare i dettagli immessi per la distribuzione API e per i singoli instradamenti.
- Selezionare Crea o Aggiorna per creare o aggiornare la distribuzione API.
- (Facoltativo) Confermare che l'interfaccia API è stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita su un gateway API).
Modifica di un file JSON per aggiungere criteri di richiesta CORS
Per aggiungere un criterio di richiesta CORS a una specifica di distribuzione API in un file JSON, effettuare le operazioni riportate di seguito.
-
Utilizzando l'editor JSON preferito, modificare la specifica di distribuzione API esistente a cui si desidera aggiungere il supporto CORS o creare una nuova specifica di distribuzione API (vedere Creazione di una specifica di distribuzione API).
Ad esempio, la seguente specifica di distribuzione API di base definisce una semplice funzione serverless Hello World nelle funzioni OCI come un singolo backend:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] } -
Per specificare un criterio di richiesta CORS che si applica a livello globale a tutti gli instradamenti in una distribuzione API, effettuare le operazioni riportate di seguito.
-
Se non esiste già, inserire una sezione
requestPoliciesprima della sezioneroutes. Ad esempio:{ "requestPolicies": {}, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] } -
Aggiungere il seguente criterio
corsalla nuova sezionerequestPoliciesda applicare a livello globale a tutti gli instradamenti in una distribuzione API:{ "requestPolicies": { "cors":{ "allowedOrigins": [<list-of-origins>], "allowedMethods": [<list-of-methods>], "allowedHeaders": [<list-of-implicit-headers>], "exposedHeaders": [<list-of-exposed-headers>], "isAllowCredentialsEnabled": <true|false>, "maxAgeInSeconds": <seconds> } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }dove:
-
"allowedOrigins": [<list-of-origins>]è una lista di origini obbligatoria separata da virgole e consentita per l'accesso alla distribuzione API. Ad esempio, "allowedOrigins": ["*", "https://oracle.com"] -
"allowedMethods": [<list-of-methods>]è una lista facoltativa separata da virgole di metodi HTTP consentiti nella richiesta effettiva alla distribuzione dell'API. Ad esempio,"allowedMethods": ["*", "GET"] -
"allowedHeaders": [<list-of-implicit-headers>]è una lista facoltativa separata da virgole di intestazioni HTTP consentite nella richiesta effettiva alla distribuzione dell'API. Ad esempio,"allowedHeaders": ["opc-request-id", "If-Match"] -
"exposedHeaders": [<list-of-exposed-headers>]è una lista facoltativa di intestazioni HTTP separate da virgole a cui i client API possono accedere nella risposta della distribuzione API a una richiesta effettiva. Ad esempio,"exposedHeaders": ["ETag", "opc-request-id"] -
"isAllowCredentialsEnabled": <true|false>ètrueofalse, a indicare se la richiesta effettiva alla distribuzione dell'API può essere effettuata utilizzando le credenziali (cookie, intestazioni di autorizzazione o certificati client TLS). Se non viene specificato, il valore predefinito èfalse. -
"maxAgeInSeconds": <seconds>è un valore intero che indica per quanto tempo (in secondi delta) i risultati di una richiesta preliminare possono essere inseriti nella cache da un browser. Se non viene specificato, il valore predefinito è0.
Ad esempio:
{ "requestPolicies": { "cors":{ "allowedOrigins": ["*", "https://oracle.com"], "allowedMethods": ["*", "GET"], "allowedHeaders": [], "exposedHeaders": [], "isAllowCredentialsEnabled": false, "maxAgeInSeconds": 3000 } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }Per informazioni su come i diversi campi del criterio di richiesta CORS vengono mappati su intestazioni di risposta CORS diverse, vedere Modalità di mapping di un criterio di richiesta CORS a una risposta CORS.
-
-
-
Per specificare un criterio di richiesta CORS che si applica a un singolo instradamento:
-
Inserire una sezione
requestPoliciesdopo la sezione backend per l'instradamento a cui si desidera applicare il criterio. Ad esempio:{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": {} } ] } - Aggiungere il seguente criterio
corsalla nuova sezionerequestPoliciesda applicare solo a questo instradamento specifico:{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "cors":{ "allowedOrigins": [<list-of-origins>], "allowedMethods": [<list-of-methods>], "allowedHeaders": [<list-of-implicit-headers>], "exposedHeaders": [<list-of-exposed-headers>], "isAllowCredentialsEnabled": <true|false>, "maxAgeInSeconds": <seconds> } } } ] }dove:
-
"allowedOrigins": [<list-of-origins>]è una lista di origini obbligatoria separata da virgole e consentita per l'accesso alla distribuzione API. Ad esempio, "allowedOrigins": ["*", "https://oracle.com"] -
"allowedMethods": [<list-of-methods>]è una lista facoltativa separata da virgole di metodi HTTP consentiti nella richiesta effettiva alla distribuzione dell'API. Ad esempio,"allowedMethods": ["*", "GET"] -
"allowedHeaders": [<list-of-implicit-headers>]è una lista facoltativa separata da virgole di intestazioni HTTP consentite nella richiesta effettiva alla distribuzione dell'API. Ad esempio,"allowedHeaders": ["opc-request-id", "If-Match"] -
"exposedHeaders": [<list-of-exposed-headers>]è una lista facoltativa di intestazioni HTTP separate da virgole a cui i client API possono accedere nella risposta della distribuzione API a una richiesta effettiva. Ad esempio,"exposedHeaders": ["ETag", "opc-request-id"] -
"isAllowCredentialsEnabled": <true|false>ètrueofalse, a indicare se la richiesta effettiva alla distribuzione dell'API può essere effettuata utilizzando le credenziali (cookie, intestazioni di autorizzazione o certificati client TLS). Se non viene specificato, il valore predefinito èfalse. -
"maxAgeInSeconds": <seconds>è un valore intero che indica per quanto tempo (in secondi delta) i risultati di una richiesta preliminare possono essere inseriti nella cache da un browser. Se non viene specificato, il valore predefinito è0.
Ad esempio:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "cors":{ "allowedOrigins": ["*", "https://oracle.com"], "allowedMethods": ["*", "GET"], "allowedHeaders": [], "exposedHeaders": [], "isAllowCredentialsEnabled": false, "maxAgeInSeconds": 3000 } } } ] }Per informazioni su come i diversi campi del criterio di richiesta CORS vengono mappati su intestazioni di risposta CORS diverse, vedere Modalità di mapping di un criterio di richiesta CORS a una risposta CORS.
-
-
- Salvare il file JSON contenente la specifica di distribuzione API.
-
Utilizzare la specifica di distribuzione API quando si crea o si aggiorna una distribuzione API nei modi riportati di seguito.
- specificando il file JSON nella console quando si seleziona l'opzione Carica un'API di distribuzione esistente
- specificando il file JSON in una richiesta all'API REST del gateway API
Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un Gateway API mediante la creazione di una distribuzione API e Aggiornamento di un Gateway API.
- (Facoltativo) Confermare che l'interfaccia API è stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita su un gateway API).
Modalità di mapping di un criterio di richiesta CORS a una risposta CORS
I diversi campi di una mappa dei criteri di richiesta CORS su intestazioni di risposta CORS diverse, come illustrato nella tabella:
| Campo | Mappa a intestazione risposta CORS | Incluso in risposta a richiesta pre-volo | Incluso in risposta a richiesta effettiva | Note |
|---|---|---|---|---|
allowed Origins
|
Accesso-Control-Consenti-Origine | Sì | Sì |
Obbligatorio?: sì Tipo di dati: stringa[] Valore predefinito: n/a Utilizzato per restituire una lista separata da virgole di origini che possono accedere alla distribuzione API. La specifica CORS consente una sola origine, pertanto in caso di origini multiple l'origine client deve essere controllata dinamicamente in base all'elenco dei valori consentiti. I valori "*" e "null" sono consentiti. |
allowed Methods
|
Metodi consentiti per controllo dell'accesso | Sì | No |
Obbligatorio?: no Tipo di dati: stringa[] Valore predefinito: lista vuota Utilizzato per restituire alla distribuzione API una lista separata da virgole di metodi HTTP consentiti nella richiesta effettiva. Il valore predefinito di Access-Control-Allow-Methods è quello di consentire attraverso tutti i metodi semplici, anche sulle richieste di preflight. |
allowed Headers
|
Intestazioni consentite per controllo dell'accesso | Sì | No |
Obbligatorio?: no Tipo di dati: stringa[] Valore predefinito: lista vuota Utilizzato per restituire alla distribuzione dell'API una lista separata da virgole di intestazioni HTTP consentite nella richiesta effettiva. |
exposed Headers
|
Access-Control-Expose-Headers | No | Sì |
Obbligatorio?: no Tipo di dati: stringa[] Valore predefinito: lista vuota Utilizzato per restituire una lista separata da virgole di intestazioni HTTP a cui i client possono accedere nella risposta della distribuzione API a una richiesta effettiva. Questa lista di intestazioni HTTP si aggiunge alle intestazioni di risposta CORS-safelisted. |
isAllow Credentials Enabled
|
Credenziali per controllo dell'accesso consentito | Sì | Sì |
Obbligatorio?: no Tipo di dati: booleano
Valore predefinito: Utilizzato per restituire Per consentire l'esecuzione di richieste con credenziali, impostare |
maxAge InSeconds
|
Durata massima controllo dell'accesso | Sì | No |
Obbligatorio?: no Tipo di dati: numero intero
Impostazione predefinita: 0. |