

# CloudFront 요청 헤더 추가
<a name="adding-cloudfront-headers"></a>

CloudFront가 최종 사용자의 요청에서 원본 또는 [엣지 기능](edge-functions.md)으로 특정 HTTP 헤더를 추가하도록 CloudFront를 구성할 수 있습니다. 이러한 HTTP 헤더의 값은 최종 사용자 또는 최종 사용자 요청의 특성을 기반으로 합니다. 헤더는 최종 사용자의 디바이스 유형, IP 주소, 지리적 위치, 요청 프로토콜(HTTP 또는 HTTPS), HTTP 버전 및 TLS 연결 세부 정보, [JA3 핑거프린트](https://github.com/salesforce/ja3) 및 JA4 핑거프린트를 제공할 수 있습니다. 또한 WebSocket 헤더를 전달하도록 배포의 캐시 동작을 구성할 수 있습니다. 자세한 내용은 [CloudFront 배포에 WebSocket 사용](distribution-working-with.websockets.md) 섹션을 참조하세요.

이러한 헤더를 사용하면 정보를 확인하기 위해 직접 코드를 작성할 필요 없이 오리진 또는 엣지 함수에서 최종 사용자에 대한 정보를 수신할 수 있습니다. 오리진에서 이러한 헤더 정보를 기반으로 서로 다른 응답을 반환하는 경우, *캐시 키*에 해당 응답을 포함시켜 CloudFront에서 별도로 캐시할 수 있습니다. 예를 들어, 오리진에서는 최종 사용자가 거주하는 국가에 따라 특정 언어로 된 콘텐츠나 특정 디바이스 유형에 맞춘 콘텐츠로 응답할 수 있습니다. 오리진에서 로그 파일에 이러한 헤더를 쓸 수도 있습니다. 이 헤더를 사용하여 최종 사용자의 위치, 사용 중인 디바이스 유형 등에 대한 정보를 확인할 수 있습니다.

캐시 키에 헤더를 포함하려면 *캐시 정책*을 사용합니다. 자세한 내용은 [정책으로 캐시 키 제어](controlling-the-cache-key.md) 및 [캐시 키 이해](understanding-the-cache-key.md) 섹션을 참조하세요.

원본에서 이러한 헤더를 수신하지만 캐시 키에는 포함하지 않으려면 *원본 요청 정책*을 사용하십시오. 자세한 내용은 [정책을 통한 오리진 요청 제어](controlling-origin-requests.md) 섹션을 참조하세요.

**Topics**
+ [

## 디바이스 유형 헤더
](#cloudfront-headers-device-type)
+ [

## 뷰어 위치 헤더
](#cloudfront-headers-viewer-location)
+ [

## 뷰어의 헤더 구조를 결정하기 위한 헤더
](#cloudfront-headers-viewer-headers)
+ [

## TLS 관련 헤더
](#tls-related-versions)
+ [

## 기타 CloudFront 헤더
](#cloudfront-headers-other)

## 디바이스 유형 헤더
<a name="cloudfront-headers-device-type"></a>

다음 헤더를 추가하여 최종 사용자의 디바이스 유형을 확인할 수 있습니다. `User-Agent` 헤더 값에 따라 CloudFront에서는 해당 헤더 값을 `true` 또는 `false`로 설정합니다. 디바이스가 둘 이상의 범주에 속하는 경우 둘 이상의 값이 `true`일 수 있습니다. 예를 들어 일부 태블릿 디바이스의 경우 CloudFront에서는 `CloudFront-Is-Mobile-Viewer`와 `CloudFront-Is-Tablet-Viewer`를 모두 `true`로 설정합니다.
+ `CloudFront-Is-Android-Viewer` – CloudFront에서 최종 사용자가 Android 운영 체제를 사용하는 디바이스라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-Desktop-Viewer` – CloudFront에서 최종 사용자가 데스크톱 디바이스라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-IOS-Viewer` – CloudFront에서 최종 사용자가 iPhone, iPod touch, iPad 디바이스와 같은 Apple 모바일 운영 체제를 사용하는 디바이스라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-Mobile-Viewer` – CloudFront에서 최종 사용자가 모바일 디바이스라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-SmartTV-Viewer` – CloudFront에서 최종 사용자가 스마트 TV라고 확인되면 `true`로 설정합니다.
+ `CloudFront-Is-Tablet-Viewer` – CloudFront에서 최종 사용자가 태블릿이라고 확인되면 `true`로 설정합니다.

## 뷰어 위치 헤더
<a name="cloudfront-headers-viewer-location"></a>

다음 헤더를 추가하여 최종 사용자의 위치를 확인합니다. CloudFront는 최종 사용자의 IP 주소에 따라 이러한 헤더의 값을 확인합니다. 이 헤더 값에 ASCII 문자가 아닌 문자가 있는 경우, CloudFront는 [RFC 3986의 섹션 1.2](https://tools.ietf.org/html/rfc3986#section-2.1)에 따라 문자를 퍼센트 인코딩합니다.
+ `CloudFront-Viewer-Address` - 최종 사용자의 IP 주소와 요청의 소스 포트를 포함합니다. 예를 들어, 헤더 값 `198.51.100.10:46532`는 최종 사용자의 IP 주소가 198.51.100.10이고 요청 소스 포트가 46532임을 의미합니다.
+ `CloudFront-Viewer-ASN` - 최종 사용자의 Autonomous System Number(ASN)를 포함합니다.
**참고**  
`CloudFront-Viewer-Address` 및 `CloudFront-Viewer-ASN`을 오리진 요청 정책에는 추가할 수 있지만 캐시 정책에는 추가할 수 없습니다.
+ `CloudFront-Viewer-Country` – 최종 사용자 국가의 두 자로 된 국가 코드가 들어 있습니다. 국가 코드 목록은 [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 단원을 참조하세요.
+ `CloudFront-Viewer-City` – 최종 사용자의 도시 이름을 포함합니다.

다음 헤더를 추가하면 CloudFront는 AWS 네트워크에서 시작된 요청을 *제외한* 모든 요청에 해당 헤더를 적용합니다.
+ `CloudFront-Viewer-Country-Name` – 최종 사용자 국가의 이름을 포함합니다.
+ `CloudFront-Viewer-Country-Region` – 최종 사용자 리전을 나타내는 코드(최대 3자)를 포함합니다. 리전은 [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)코드의 첫 번째 수준의 하위 항목(가장 폭넓거나 가장 덜 구체적)입니다.
+ `CloudFront-Viewer-Country-Region-Name` – 최종 사용자 리전의 이름을 포함합니다. 리전은 [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)코드의 첫 번째 수준의 하위 항목(가장 폭넓거나 가장 덜 구체적)입니다.
+ `CloudFront-Viewer-Latitude` – 최종 사용자의 대략적인 위도를 포함합니다.
+ `CloudFront-Viewer-Longitude` – 최종 사용자의 대략적인 경도를 포함합니다.
+ `CloudFront-Viewer-Metro-Code` – 최종 사용자의 메트로 코드를 포함합니다. 이는 최종 사용자가 미국에 있을 때만 표시됩니다.
+ `CloudFront-Viewer-Postal-Code` – 최종 사용자의 우편 번호를 포함합니다.
+ `CloudFront-Viewer-Time-Zone` [IANA 표준 시간대 데이터베이스 형식](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)(예: `America/Los_Angeles`)으로 최종 사용자의 표준 시간대를 포함합니다.

**참고**  
`CloudFront-Viewer-City`, `CloudFront-Viewer-Metro-Code` 및 `CloudFront-Viewer-Postal-Code`를 모든 IP 주소에 사용할 수 있는 것은 아닙니다. 일부 IP 주소는 해당 정보를 얻을 수 있을 만큼 구체적으로 지리적 위치를 파악할 수 없습니다.

## 뷰어의 헤더 구조를 결정하기 위한 헤더
<a name="cloudfront-headers-viewer-headers"></a>

다음 헤더를 추가하여 전송한 헤더를 기반으로 최종 사용자를 식별할 수 있습니다. 예를 들어, 다양한 브라우저가 특정 순서로 HTTP 헤더를 전송할 수 있습니다. `User-Agent` 헤더에 지정된 브라우저가 해당 브라우저의 예상 헤더 순서와 일치하지 않는 경우 요청을 거부할 수 있습니다. 또한 `CloudFront-Viewer-Header-Count` 값이 `CloudFront-Viewer-Header-Order`의 헤더 수와 일치하지 않는 경우 요청을 거부할 수 있습니다.
+ `CloudFront-Viewer-Header-Order` — 최종 사용자의 헤더 이름을 요청된 순서대로 콜론으로 구분하여 포함합니다. 예를 들면 `CloudFront-Viewer-Header-Order: Host:User-Agent:Accept:Accept-Encoding`입니다. 7,680자 제한을 초과하는 헤더는 잘립니다.
+ `CloudFront-Viewer-Header-Count` — 최종 사용자 헤더의 총 수를 포함합니다.

## TLS 관련 헤더
<a name="tls-related-versions"></a>

다음 헤더를 추가하여 뷰어의 JA3 지문, JA4 지문, TLS 연결 세부 정보를 확인할 수 있습니다.
+ `CloudFront-Viewer-JA3-Fingerprint` — 최종 사용자의 [JA3 지문](https://github.com/salesforce/ja3)을 포함합니다. JA3 지문은 해당 요청이 알려진 클라이언트에서 온 것인지, 맬웨어인지 악성 봇인지 또는 예상되는(허용 목록에 있는) 응용 프로그램에서 온 것인지 판단하는 데 도움이 됩니다.
+ `CloudFront-Viewer-JA4-Fingerprint` - 뷰어의 JA4 지문이 포함되어 있습니다. JA3 지문과 마찬가지로 [JA4 지문](https://github.com/FoxIO-LLC/ja4)을 사용하면 해당 요청이 알려진 클라이언트에서 온 것인지, 멀웨어인지, 악성 봇인지 또는 예상되는(허용 목록에 있는) 애플리케이션에서 유입된 것인지 확인할 수 있습니다. 지문을 사용하여 HTTP 요청을 검사할 때 적용할 알려진 좋은 행위자와 나쁜 행위자의 데이터베이스를 구축할 수 있습니다. 그런 다음 애플리케이션 웹 서버 또는 [Lambda@Edge](lambda-at-the-edge.md) 및 [CloudFront Functions](cloudfront-functions.md)에서 헤더 값을 검사하여 헤더 값을 알려진 멀웨어 지문 목록과 비교하여 악성 클라이언트를 차단할 수 있습니다.
+ `CloudFront-Viewer-TLS` - 최종 사용자와 CloudFront 간의 연결에 사용된 SSL/TLS 버전, 암호, SSL/TLS 핸드셰이크 정보를 포함합니다. 헤더 값은 다음 형식입니다.

  ```
  SSL/TLS_version:cipher:handshake_information
  ```

  `handshake_information`에 대해 헤더는 다음 값 중 하나를 포함할 수 있습니다.
  + `fullHandshake` - SSL/TLS 세션에 대해 전체 핸드셰이크가 수행되었습니다.
  + `sessionResumed` - 이전 SSL/TLS 세션이 재개되었습니다.
  + `connectionReused` - 이전 SSL/TLS 연결이 재사용되었습니다.

  다음은 이 헤더에 대한 몇 가지 예시 값입니다.

  ```
  TLSv1.3:TLS_AES_128_GCM_SHA256:sessionResumed
  ```

  ```
  TLSv1.2:ECDHE-ECDSA-AES128-GCM-SHA256:connectionReused
  ```

  ```
  TLSv1.1:ECDHE-RSA-AES128-SHA256:fullHandshake
  ```

  ```
  TLSv1:ECDHE-RSA-AES256-SHA:fullHandshake
  ```

  이 헤더 값에 있을 수 있는 SSL/TLS 버전 및 암호의 전체 목록은 [최종 사용자와 CloudFront 간에 지원되는 프로토콜 및 암호](secure-connections-supported-viewer-protocols-ciphers.md) 단원을 참조하세요.

**참고**  
JA3 및 JA4 지문은 SSL/TLS `Client Hello` 패킷에서 파생됩니다. 이는 HTTPS 요청에만 존재합니다.
이러한 TLS 관련 헤더의 경우 [오리진 요청 정책](controlling-origin-requests.md)에 추가할 수 있지만 [캐시 정책](controlling-the-cache-key.md)에는 추가할 수 없습니다.

## 기타 CloudFront 헤더
<a name="cloudfront-headers-other"></a>

다음 헤더를 추가하여 뷰어의 원본 요청 URI, 원본 요청 쿼리 문자열 파라미터와 값, 프로토콜, 버전을 확인할 수 있습니다.
+ `CloudFront-Error-Uri` - 뷰어로부터 받은 원본 요청 URI를 포함합니다.
+ `CloudFront-Error-Args` - 원본 요청 쿼리 문자열 파라미터 및 값을 포함합니다.
+ `CloudFront-Forwarded-Proto` – 최종 사용자의 요청 프로토콜(HTTP 또는 HTTPS)을 포함합니다.
+ `CloudFront-Viewer-Http-Version` – 최종 사용자 요청의 HTTP 버전을 포함합니다.