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

+ Recent posts