我遇到了一个问题,我的调度器CORS配置,调试这是证明是疯狂的挑战。
环境-
AEM作为云服务。Web应用程序正在使用几个内容片段模型API。Web应用有3个非prod环境,每个环境都有自己的域,所有三个域都命中同一个aem示例来消耗模型API。
问题-
CORS响应只缓存第一个请求者(比如domain1.com),直到缓存过期。来自其他来源(例如domain2.com和domain3.com)的后续CORS请求失败,因为缓存的来源与当前请求者的来源不同(即使它们是我们策略下的“允许来源”)。
CORS策略已阻止从源“https://www.example.com”访问位于“https://publish-p12345-e12345.adobeaemcloud.com/content/wknd/us/en/api/experiments.model.json”的XMLHttpRequestdomain2.com:“Access-Control-Allow-Origin”标头的值“https:domain1.com”不等于提供的源。
AEM设置-
- OSGi配置(
com.adobe.granite.cors.impl.CORSPolicyImpl
)
{
"allowedpaths": [".*"],
"alloworigin": ["https://domain1.com","https://domain2.com","https://domain3.com"],
"alloworiginregexp": [],
"exposedheaders": [],
"maxage:Integer": 1800,
"supportedheaders": ["Origin","Accept","X-Requested-With","Content-Type","Access-Control-Request-Method","Access-Control-Request-Headers"],
"supportedmethods": ["HEAD","GET"],
"supportscredentials": false
}
/conf.d/available_vhosts/wknd.vhost
<Directory />
....
Header merge Vary Origin
....
</Directory>
<IfModule mod_headers.c>
# Multi domain CORS support
SetEnvIfNoCase Origin "https?://(www\.)?(domain1\.com|domain2\.com|domain3\.com)(:\d+)?$" ACAO=$0
Header set Access-Control-Allow-Origin %{ACAO}e env=ACAO
Header set Vary Origin
<LocationMatch "\.(json)$">
Header set Cache-Control "max-age=600,stale-while-revalidate=86400,stale-if-error=86400" "expr=%{REQUEST_STATUS} < 400"
Header set Age 0
</LocationMatch>
</IfModule>
也试过
- 删除
Vary Origin
行 - Header总是加上Access-Control-Allow-Origin,都没用。
1.未在conf/dispatcher.d/available_farms/wknd.farm/publishfarm/headers
中缓存任何CORS标头
/headers {
"Cache-Control"
"Content-Disposition"
"Content-Type"
"Expires"
"Last-Modified"
"X-Content-Type-Options"
"Surrogate-Control"
}
1.向conf/dispatcher.d/clientheaders
添加访问控制头
$include "./default_clientheaders.any"
"Origin"
"Access-Control-Request-Method"
"Access-Control-Request-Headers"
谁能在过去的指导下解决这个问题?
1条答案
按热度按时间vshtjzan1#
我现在正在处理与CORS请求完全相同的问题,并且在几个类似的论坛上读到后续的请求被阻止。您是否尝试过删除OSGI配置,只运行vhost配置?这两种配置可能相互冲突。