Adobe Experience Manager의 원본 간 리소스 공유(CORS)는 비 AEM 웹 속성을 사용하여 클라이언트측을 호출하여 인증되거나 인증되지 않은 AEM을 모두 호출하여 콘텐츠를 가져오거나 AEM과 직접 상호 작용할 수 있도록 합니다.
CORS 구성은 AEM에서 OSGi 구성 팩토리로 관리되며 각 정책은 팩토리의 하나의 인스턴스로 표시됩니다.
http://<host>:<port>/system/console/configMgr > Adobe Granite Cross Origin Resource Sharing Policy
Adobe Granite Cross-Origin Resource Sharing Policy (com.adobe.granite.cors.impl.CORSPolicyImpl
)
정책을 선택하려면
Allowed Origin
(으)로 Origin
요청 헤더Allowed Paths
요청 경로 포함.이 값과 일치하는 첫 번째 정책이 사용됩니다. 찾을 수 없는 경우 CORS 요청이 거부되었습니다.
구성된 정책이 없으면 CORS 서버의 다른 모듈이 응답하지 않는 한 핸들러가 비활성화되어 효과적으로 거부되므로 요청에 대한 응답도 이루어지지 않습니다. CORS.
"alloworigin" <origin> | *
origin
리소스에 액세스할 수 있는 URI를 지정하는 매개 변수입니다. 자격 증명이 없는 요청의 경우 서버에서 다음을 지정할 수 있습니다. * 를 와일드카드로 만들기 때문에 모든 원본이 리소스에 액세스할 수 있습니다. 를 사용하지 않는 것이 좋습니다 Allow-Origin: *
프로덕션 환경에서는 모든 외국(즉, 공격자) 웹 사이트에서 CORS가 없는 것은 브라우저에서 엄격히 금지된다는 요청을 할 수 있기 때문입니다."alloworiginregexp" <regexp>
regexp
리소스에 액세스할 수 있는 URI를 지정하는 정규 표현식. 정규 표현식은 신중하게 작성되지 않으면 의도하지 않은 일치로 이어질 수 있으므로 공격자가 정책과 일치하는 사용자 정의 도메인 이름을 사용할 수 있습니다. 일반적으로 를 사용하여 각 특정 원본 호스트 이름에 대해 별도의 정책을 사용하는 것이 좋습니다. alloworigin
를 조정할 경우 다른 정책 속성이 반복적으로 구성된 경우에도 마찬가지입니다. 서로 다른 기원은 서로 다른 수명 주기와 요구 사항을 갖는 경향이 있으므로 명확한 분리로부터 이익을 얻을 수 있다."allowedpaths" <regexp>
regexp
정책이 적용되는 리소스 경로를 지정하는 정규 표현식."exposedheaders" <header>
"maxage" <seconds>
seconds
프리플라이트 요청의 결과가 캐시될 수 있는 기간을 나타내는 매개 변수."supportedheaders" <header>
header
실제 요청을 수행할 때 사용할 수 있는 HTTP 헤더를 나타내는 매개 변수입니다."supportedmethods"
"supportscredentials" <boolean>
boolean
요청에 대한 응답을 브라우저에 노출할 수 있는지 여부를 나타냅니다. 프리플라이트 요청에 대한 응답의 일부로 사용되는 경우 자격 증명을 사용하여 실제 요청을 수행할 수 있는지 여부를 나타냅니다.사이트 1은 익명으로 액세스할 수 있는 기본 읽기 전용 시나리오로, 콘텐츠를 GET 요청:
{
"supportscredentials":false,
"exposedheaders":[
""
],
"supportedmethods":[
"GET",
"HEAD",
"OPTIONS"
],
"alloworigin":[
"http://127.0.0.1:3000",
"https://site1.com"
],
"maxage:Integer": 1800,
"alloworiginregexp":[
"http://localhost:.*"
"https://.*\.site1\.com"
],
"allowedpaths":[
"/content/_cq_graphql/site1/endpoint.json",
"/graphql/execute.json.*",
"/content/site1/.*"
],
"supportedheaders":[
"Origin",
"Accept",
"X-Requested-With",
"Content-Type",
"Access-Control-Request-Method",
"Access-Control-Request-Headers",
]
}
사이트 2는 보다 복잡하며 승인 및 변경(POST, PUT, DELETE) 요청이 필요합니다.
{
"supportscredentials":true,
"exposedheaders":[
""
],
"supportedmethods":[
"GET",
"HEAD"
"POST",
"DELETE",
"OPTIONS",
"PUT"
],
"alloworigin":[
"http://127.0.0.1:3000",
"https://site2.com"
],
"maxage:Integer": 1800,
"alloworiginregexp":[
"http://localhost:.*"
"https://.*\.site2\.com"
],
"allowedpaths":[
"/content/site2/.*",
"/libs/granite/csrf/token.json",
],
"supportedheaders":[
"Origin",
"Accept",
"X-Requested-With",
"Content-Type",
"Access-Control-Request-Method",
"Access-Control-Request-Headers",
"Authorization",
"CSRF-Token"
]
}
Dispatcher 4.1.1 이상 응답 헤더를 캐시할 수 있습니다. 이를 통해 캐싱할 수 있습니다 CORS 를 따라 헤더 표시 CORS- 요청이 익명으로 되어 있는 한 요청된 리소스입니다.
일반적으로 Dispatcher에서 콘텐츠를 캐시하기 위한 동일한 고려 사항은 Dispatcher에서 CORS 응답 헤더를 캐시하는 데 적용할 수 있습니다. 다음 표는 다음과 같은 시점을 정의합니다 CORS 헤더(따라서 CORS 요청)을 캐시할 수 있습니다.
캐시 가능 | 환경 | 인증 상태 | 설명 |
---|---|---|---|
아니요 | AEM 게시 | 인증됨 | AEM 작성자에 대한 Dispatcher 캐싱은 작성되지 않은 정적 자산으로 제한됩니다. 따라서 HTTP 응답 헤더를 포함하여 대부분의 리소스를 AEM 작성자에 캐시하는 것이 어렵고 비현실적입니다. |
아니요 | AEM 게시 | 인증됨 | 인증된 요청에 대해 CORS 헤더를 캐시하지 마십시오. 이는 요청하는 사용자의 인증/권한 부여 상태가 전달된 리소스에 미치는 영향을 판단하기 어렵기 때문에 인증된 요청을 캐시하지 않는다는 일반적인 지침을 따릅니다. |
예 | AEM 게시 | 익명 | Dispatcher에서 캐시 가능한 익명 요청은 응답 헤더도 캐시할 수 있으므로 향후 CORS 요청이 캐시된 콘텐츠에 액세스할 수 있습니다. AEM 게시의 모든 CORS 구성 변경 필수 영향을 받는 캐시된 리소스의 무효화가 뒤따릅니다. 우수 사례에서는 영향을 줄 수 있는 캐시된 콘텐츠를 확인하기 어렵기 때문에 Dispatcher 캐시가 삭제되는 코드 또는 구성 배포에 대해 설명합니다. |
CORS 헤더의 캐싱을 허용하려면 지원하는 모든 AEM Publish dispatcher.any 파일에 다음 구성을 추가하십시오.
/myfarm {
...
/headers {
"Origin"
"Access-Control-Allow-Origin"
"Access-Control-Expose-Headers"
"Access-Control-Max-Age"
"Access-Control-Allow-Credentials"
"Access-Control-Allow-Methods"
"Access-Control-Allow-Headers"
}
...
}
다음을 잊지 마십시오. 웹 서버 응용 프로그램을 다시 시작합니다. 을(를) 변경한 후 dispatcher.any
파일.
다음 요청 시 헤더가 적절하게 캐시되도록 하려면 캐시를 완전히 지워야 할 수 있습니다. /cache/headers
구성 업데이트.
로깅은 다음에서 사용할 수 있습니다. com.adobe.granite.cors
:
DEBUG
이(가) 왜 CORS 요청이 거부되었습니다.TRACE
CORS 핸들러를 거치는 모든 요청에 대한 세부 정보 보기Access-Control-Allow-Origin
헤더에 응답이 없습니다. 로그에서 거부 여부를 검토하십시오. DEBUG 위치: com.adobe.granite.cors
/cache/headers
구성이에 적용됩니다. dispatcher.any
웹 서버가 다시 시작되었습니다.