HTTP 응답 헤더
- Cross-Origin 리소스 공유 명세에 정의된 대로 서버가 접근 제어 요청을 위해 보내는 HTTP 응답 헤더가 나열
1. Access-Control-Allow-Origin
리턴된 리소스에는 다음 구문과 함께 하나의 Access-Control-Allow-Origin 헤더가 있을 수 있음
# 특정 Origin Access-Control-Allow-Origin: <origin> # 모든 Origin 표현을 위해 * (asterisk 사용) Access-Control-Allow-Origin: *
- Access-Control-Allow-Origin은 단일 출처를 지정하여 브라우저가 해당 출처가 리소스에 접근하도록 허용
- 자격 증명이 없는 요청의 경우, 와일드 카드(*)는 브라우저의 origin에 상관없이 모든 리소스에 접근하도록 허용
- 예를들어 https://mozilla.org 의 코드가 리소스에 접근 할 수 있도록 하려면 아래와 같이 지정 가능
Access-Control-Allow-Origin: https://mozilla.org
- 서버가 와일드 카드(*) 대신에 하나의 origin을 지정하는 경우, 서버는 Vary 응답 헤더에 Origin을 포함해야 함
- Origin은 화이트 리스트의 일부로 요청 Orgin에 따라 동적으로 변경될 수 있음
- 서버 응답이 Origin 요청 헤더에 따라 다르다는것을 클라이언트에 알려줌
2. Access-Control-Expose-Headers
- Access-Control-Expose-Headers 헤더를 사용하면 브라우저가 접근할 수 있는 헤더를 서버의 화이트리스트에 추가 가능
Access-Control-Expose-Headers: <header-name>[, <header-name>]*
- 예시) X-My-Custom-Header와 X-Another-Custom-Header 헤더가 브라우저에 전달
Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header
3. Access-Control-Max-Age
- Access-Control-Max-Age 헤더는 preflight request 요청 결과를 캐시할 수 있는 시간
- delta-seconds 파라미터는 결과를 캐시할 수 있는 시간(초)를 나타냄
Access-Control-Max-Age: <delta-seconds>
- 예시) preflight request 요청 결과를 1일 캐시
Access-Control-Max-Age: 86400
4. Access-Control-Allow-Credentials
- Access-Control-Allow-Credentials 헤더는 credentials 플래그가 true일 때 요청에 대한 응답을 표시할 수 있는지를 나타냄
- preflight request에 대한 응답의 일부로 사용하는 경우, credentials을 사용하여 실제 요청을 수행할 수 있는지 나타냄
- simple GET requests는 preflighted 되지 않으므로 credentials이 있는 리소스를 요청하면 반환되지 않음
- Access-Control-Allow-Credentials 헤더가 없으면 브라우저에서 응답을 무시하고 웹 컨텐츠로 반환되지 않음
Access-Control-Allow-Credentials: true
5. Access-Control-Allow-Methods
- Access-Control-Allow-Methods 헤더는 리소스에 접근할 때 허용되는 메서드를 지정
- Access-Control-Allow-Methods 헤더는 preflight request에 대한 응답으로 사용
Access-Control-Allow-Credentials: true
6. Access-Control-Allow-Headers
- preflight request에 대한 응답으로 Access-Control-Allow-Headers 헤더가 사용
- 실제 요청시 사용할 수 있는 HTTP 헤더를 나타냄
Access-Control-Allow-Headers: <header-name>[, <header-name>]*
HTTP 요청 헤더
- cross-origin 공유 기능을 사용하기 위해 클라이언트가 HTTP 요청을 발행할 때 사용할 수 있는 헤더가 나열됨
- HTTP 요청 헤더는 서버를 호출할 때 설정
- cross-site XMLHttpRequest 기능을 사용하는 개발자는 프로그래밍 방식으로 cross-origin 공유 요청 헤더를 설정할 필요가 없음
1. Origin
- Origin 헤더는 cross-site 접근 요청 또는 preflight request의 출처를 나타냄
- Origin 은 요청이 시작된 서버를 나타내는 URI → 경로 정보는 포함하지 않고, 오직 서버 이름만 포함
- Origin 값은 null 또는 URI 가 올 수 있음
Origin: <origin>
2. Access-Control-Request-Method
- Access-Control-Request-Method 헤더는 실제 요청에서 어떤 HTTP 메서드를 사용할지 서버에게 알려주기 위해, preflight request 할 때에 사용
Access-Control-Request-Method: <method>
3. Access-Control-Request-Headers
- Access-Control-Request-Headers 헤더는 실제 요청에서 어떤 HTTP 헤더를 사용할지 서버에게 알려주기 위해, preflight request 할 때에 사용
Access-Control-Request-Headers: <field-name>[, <field-name>]*
'HTTP > CORS' 카테고리의 다른 글
XHR (XML Http Request)이란 (0) | 2022.07.24 |
---|---|
4장. AWS S3 + CloudFront로 CDN 구축 시 CORS 강제 설정 (0) | 2022.07.24 |
2장. CDN을 통한 CORS 및 CORS 요청 (0) | 2022.07.24 |
1장. CORS 기본 정리 (0) | 2022.07.24 |