Controlla quali origini possono accedere ad API o interfacce eseguite su un dominio diverso. Le impostazioni rilevanti sono:
Access-Control-Allow-Methods — quali metodi (GET, POST, ecc.) devono essere consentiti
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods
Access-Control-Allow-Origin — da quali domini è consentito l'accesso
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
Access-Control-Allow-Headers — quali header possono essere trasmessi durante la richiesta (opzionale)
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers
Inoltre, le richieste CORS preflight devono essere consentite. In questo caso il browser esegue richieste OPTIONS per verificare in anticipo se l'API è configurata correttamente e se l'accesso è permesso. Anche qui deve essere restituito il codice di stato HTTP 200.
Ecco un esempio. Supponiamo che esista l'accesso a https://test.it, che integra un'API esterna https://api.example.com. Nell'esempio viene trasmesso anche un header content-type.
In questa situazione devi creare o modificare un file .htaccess nella directory iniziale di api.example.com. Puoi strutturarlo come nell'esempio seguente. (Fai attenzione ai commenti):
# Qui devi indicare i metodi HTTP "supportati". OPTIONS va *sempre* incluso; maggiori informazioni su questa impostazione:
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
# Configura in base alle tue esigenze:
header always set Access-Control-Allow-Methods OPTIONS,GET,POST,PUT
# Qui devi specificare da quali domini è consentito l'accesso. Puoi indicare più domini separati da virgola:
header always set Access-Control-Allow-Origin https://test.it
# OPZIONALE — consente ulteriori header HTTP personalizzati:
header always set Access-Control-Allow-Headers Content-Type
# Il codice di stato HTTP va applicato solo alle richieste preflight (OPTIONS). Se lo configuri per tutte le richieste, comprometti il funzionamento del sito.
<If "%{REQUEST_METHOD} == 'OPTIONS'">
# Imposta il codice di stato HTTP su 200 (successo)
RewriteRule ^ - [R=200,L]
</If>
L'interfaccia su https://api.example.com può così essere raggiunta dall'applicazione https://test.it tramite CORS.