Si el almacenamiento en caché en Dispatcher está habilitado, la variable Filtro CORS no es necesario y, por lo tanto, esa sección se puede ignorar.
El almacenamiento en caché de consultas persistentes no está habilitado de forma predeterminada en Dispatcher. La activación predeterminada no es posible, ya que los clientes que utilizan CORS (Intercambio de recursos de origen cruzado) con varios orígenes deben revisar y posiblemente actualizar su configuración de Dispatcher.
Dispatcher no almacena en caché el Vary
encabezado.
El almacenamiento en caché de otros encabezados relacionados con CORS se puede habilitar en Dispatcher, pero puede ser insuficiente cuando hay varios orígenes CORS.
Para obtener documentación detallada acerca de Dispatcher, consulte la Guía de Dispatcher.
Para habilitar el almacenamiento en caché de consultas persistentes, defina la variable de Dispatcher CACHE_GRAPHQL_PERSISTED_QUERIES
:
Añada la variable al archivo de Dispatcher global.vars
:
Define CACHE_GRAPHQL_PERSISTED_QUERIES
Cuando el almacenamiento en caché de Dispatcher está habilitado para consultas persistentes mediante Define CACHE_GRAPHQL_PERSISTED_QUERIES
un ETag
Dispatcher agrega el encabezado a la respuesta.
De forma predeterminada, la variable ETag
El encabezado de está configurado con la siguiente directiva:
FileETag MTime Size
Sin embargo, esta configuración puede causar problemas cuando se utiliza en las respuestas de consulta persistentes, ya que no tiene en cuenta los pequeños cambios en la respuesta.
Para lograr objetivos individuales ETag
cálculos en cada respuesta única en el FileETag Digest
la configuración debe usarse en la configuración de dispatcher:
<Directory />
...
FileETag Digest
</Directory>
Para ajustarse a la Requisitos de Dispatcher para documentos que se pueden almacenar en caché, Dispatcher agrega el sufijo .json
a todas las direcciones URL de consulta persistentes, de modo que el resultado se pueda almacenar en caché.
Este sufijo se agrega mediante una regla de reescritura, una vez habilitado el almacenamiento en caché de consultas persistentes.
Es posible que los clientes que utilizan solicitudes CORS tengan que revisar y actualizar su configuración CORS en Dispatcher.
El Origin
AEM no se debe pasar a la publicación mediante la interfaz de usuario de Dispatcher para que la publique:
clientheaders.any
archivo.En su lugar, las solicitudes CORS deben evaluarse para detectar orígenes permitidos en el nivel de Dispatcher. Este enfoque también garantiza que los encabezados relacionados con CORS se establezcan correctamente, en un solo lugar, en todos los casos.
vhost
archivo. A continuación se muestra un ejemplo de configuración; para simplificar, solo se ha proporcionado la parte relacionada con CORS. Puede adaptarlo para sus casos de uso específicos.<VirtualHost *:80>
ServerName "publish"
# ...
<IfModule mod_headers.c>
Header add X-Vhost "publish"
################## Start of the CORS specific configuration ##################
SetEnvIfExpr "req_novary('Origin') == ''" CORSType=none CORSProcessing=false
SetEnvIfExpr "req_novary('Origin') != ''" CORSType=cors CORSProcessing=true CORSTrusted=false
SetEnvIfExpr "req_novary('Access-Control-Request-Method') == '' && %{REQUEST_METHOD} == 'OPTIONS' && req_novary('Origin') != '' " CORSType=invalidpreflight CORSProcessing=false
SetEnvIfExpr "req_novary('Access-Control-Request-Method') != '' && %{REQUEST_METHOD} == 'OPTIONS' && req_novary('Origin') != '' " CORSType=preflight CORSProcessing=true CORSTrusted=false
SetEnvIfExpr "req_novary('Origin') -strcmatch 'https://%{HTTP_HOST}*'" CORSType=samedomain CORSProcessing=false
# For requests that require CORS processing, check if the Origin can be trusted
SetEnvIfExpr "%{HTTP_HOST} =~ /(.*)/ " ParsedHost=$1
################## Adapt the regex to match CORS origin for your environment
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(https://.*.your-domain.tld(:\d+)?$)#" CORSTrusted=true
# Extract the Origin header
SetEnvIfNoCase ^Origin$ ^https://(.*)$ CORSTrustedOrigin=https://$1
# Flush If already set
Header unset Access-Control-Allow-Origin
Header unset Access-Control-Allow-Credentials
# Trusted
Header always set Access-Control-Allow-Credentials "true" "expr=reqenv('CORSTrusted') == 'true'"
Header always set Access-Control-Allow-Origin "%{CORSTrustedOrigin}e" "expr=reqenv('CORSTrusted') == 'true'"
Header always set Access-Control-Allow-Methods "GET" "expr=reqenv('CORSTrusted') == 'true'"
Header always set Access-Control-Max-Age 1800 "expr=reqenv('CORSTrusted') == 'true'"
Header always set Access-Control-Allow-Headers "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers" "expr=reqenv('CORSTrusted') == 'true'"
# Non-CORS or Not Trusted
Header unset Access-Control-Allow-Credentials "expr=reqenv('CORSProcessing') == 'false' || reqenv('CORSTrusted') == 'false'"
Header unset Access-Control-Allow-Origin "expr=reqenv('CORSProcessing') == 'false' || reqenv('CORSTrusted') == 'false'"
Header unset Access-Control-Allow-Methods "expr=reqenv('CORSProcessing') == 'false' || reqenv('CORSTrusted') == 'false'"
Header unset Access-Control-Max-Age "expr=reqenv('CORSProcessing') == 'false' || reqenv('CORSTrusted') == 'false'"
# Always vary on origin, even if its not there.
Header merge Vary Origin
# CORS - send 204 for CORS requests which are not trusted
RewriteCond expr "reqenv('CORSProcessing') == 'true' && reqenv('CORSTrusted') == 'false'"
RewriteRule "^(.*)" - [R=204,L]
################## End of the CORS specific configuration ##################
</IfModule>
<Directory />
# ...
</Directory>
# ...
</VirtualHost>