

# 모든 엣지 함수에 대한 제한 사항
<a name="edge-function-restrictions-all"></a>

다음 제한 사항은 CloudFront 함수와 Lambda@Edge의 모든 엣지 함수에 적용됩니다.

**Topics**
+ [AWS 계정 소유권](#function-restrictions-account-ownership)
+ [CloudFront 함수와 Lambda@Edge 조합](#function-restrictions-combining-functions)
+ [HTTP 상태 코드](#function-restrictions-status-codes)
+ [HTTP 헤더](#function-restrictions-headers)
+ [쿼리 문자열](#function-restrictions-query-strings)
+ [URI](#function-restrictions-uri)
+ [URI, 쿼리 문자열 및 헤더 인코딩](#function-restrictions-encoding)
+ [Microsoft Smooth Streaming](#function-restrictions-microsoft-smooth-streaming)
+ [태그 지정](#function-restrictions-tagging)

## AWS 계정 소유권
<a name="function-restrictions-account-ownership"></a>

엣지 함수를 CloudFront 배포와 연결하려면 동일한 AWS 계정에서 함수와 배포를 소유해야 합니다.

## CloudFront 함수와 Lambda@Edge 조합
<a name="function-restrictions-combining-functions"></a>

지정된 캐시 동작에 대해 다음과 같은 제한이 적용됩니다.
+ 각 이벤트 유형(뷰어 요청, 오리진 요청, 오리진 응답 및 뷰어 응답)은 하나의 엣지 함수 연결만 가질 수 있습니다.
+ 뷰어 이벤트(뷰어 요청 및 뷰어 응답)에는 CloudFront Functions와 Lambda@Edge를 조합할 수 없습니다.

엣지 함수의 다른 모든 조합이 허용됩니다. 다음 표에서는 허용되는 조합에 대해 설명합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/edge-function-restrictions-all.html)

## HTTP 상태 코드
<a name="function-restrictions-status-codes"></a>

CloudFront는 오리진이 HTTP 상태 코드 400 이상을 반환할 때 뷰어 응답 이벤트에 대해 엣지 함수를 간접적으로 호출하지 않습니다.

오리진 응답 이벤트에 대한 Lambda@Edge 함수는 오리진이 HTTP 상태 코드 400 이상의 코드를 반환하는 경우를 포함한 *모든* 오리진 응답에 대해 호출됩니다. 자세한 내용은 [오리진 응답 트리거에서 HTTP 응답 업데이트](lambda-generating-http-responses.md#lambda-updating-http-responses) 단원을 참조하세요.

## HTTP 헤더
<a name="function-restrictions-headers"></a>

특정 HTTP 헤더는 허용되지 않습니다. 즉, 엣지 함수에 노출되지 않고 함수는 이를 추가할 수 없습니다. 다른 헤더는 읽기 전용이므로 함수가 읽을 수는 있지만 추가, 수정 또는 삭제할 수 없습니다.

**Topics**
+ [허용되지 않는 헤더](#function-restrictions-disallowed-headers)
+ [읽기 전용 헤더](#function-restrictions-read-only-headers)

### 허용되지 않는 헤더
<a name="function-restrictions-disallowed-headers"></a>

다음 HTTP 헤더는 엣지 함수에 노출되지 않으며 함수는 이를 추가할 수 없습니다. 함수가 이러한 헤더 중 하나를 추가하면 CloudFront 유효성 검사에 실패하고 CloudFront가 HTTP 상태 코드 502(Bad Gateway)를 뷰어에게 반환합니다.
+ `Connection` 
+ `Expect`
+ `Keep-Alive`
+ `Proxy-Authenticate`
+ `Proxy-Authorization`
+ `Proxy-Connection`
+ `Trailer`
+ `Upgrade`
+ `X-Accel-Buffering`
+ `X-Accel-Charset`
+ `X-Accel-Limit-Rate`
+ `X-Accel-Redirect`
+ `X-Amz-Cf-*`
+ `X-Amzn-Auth`
+ `X-Amzn-Cf-Billing`
+ `X-Amzn-Cf-Id`
+ `X-Amzn-Cf-Xff`
+ `X-Amzn-Errortype`
+ `X-Amzn-Fle-Profile`
+ `X-Amzn-Header-Count`
+ `X-Amzn-Header-Order`
+ `X-Amzn-Lambda-Integration-Tag`
+ `X-Amzn-RequestId`
+ `X-Cache`
+ `X-Edge-*`
+ `X-Forwarded-Proto`
+ `X-Real-IP`

### 읽기 전용 헤더
<a name="function-restrictions-read-only-headers"></a>

다음 헤더는 읽기 전용입니다. 함수는 이러한 값을 읽고 함수 논리에 대한 입력으로 사용할 수 있지만 값을 변경할 수는 없습니다. 함수가 읽기 전용 헤더를 추가 또는 편집하는 경우 요청은 CloudFront 유효성 검사에 실패하고 CloudFront는 HTTP 상태 코드 502(잘못된 게이트웨이)를 뷰어에게 반환합니다.

#### 뷰어 요청 이벤트의 읽기 전용 헤더
<a name="function-restrictions-read-only-headers-viewer-request"></a>

다음 헤더는 뷰어 요청 이벤트의 읽기 전용 헤더입니다.
+ `Content-Length`
+ `Host`
+ `Transfer-Encoding`
+ `Via`

#### 오리진 요청 이벤트의 읽기 전용 헤더(Lambda@Edge 전용)
<a name="function-restrictions-read-only-headers-origin-request"></a>

다음 헤더는 Lambda@Edge에만 있는 오리진 요청 이벤트에서만 읽을 수 있습니다.
+ `Accept-Encoding`
+ `Content-Length`
+ `If-Modified-Since`
+ `If-None-Match`
+ `If-Range`
+ `If-Unmodified-Since`
+ `Transfer-Encoding`
+ `Via`

#### 오리진 응답 이벤트의 읽기 전용 헤더(Lambda@Edge 전용)
<a name="function-restrictions-read-only-headers-origin-response"></a>

다음 헤더는 Lambda@Edge에만 있는 오리진 응답 이벤트에서만 읽을 수 있습니다.
+ `Transfer-Encoding`
+ `Via`

#### 뷰어 응답 이벤트의 읽기 전용 헤더
<a name="function-restrictions-read-only-headers-viewer-response"></a>

다음 헤더는 CloudFront Functions와 Lambda@Edge에 대한 뷰어 응답 이벤트에서 읽기 전용입니다.
+ `Warning`
+ `Via`

다음 헤더는 Lambda@Edge에 대한 뷰어 응답 이벤트에서 읽기 전용입니다.
+ `Content-Length`
+ `Content-Encoding`
+ `Transfer-Encoding`

## 쿼리 문자열
<a name="function-restrictions-query-strings"></a>

요청 URI에서 쿼리 문자열을 읽거나 업데이트하거나 만드는 함수에는 다음 제한 사항이 적용됩니다.
+ (Lambda@Edge 전용) 오리진 요청 또는 오리진 응답 함수에서 쿼리 문자열에 액세스하려면 캐시 정책 또는 오리진 요청 정책을 **쿼리 문자열**에 대해 **모두(ALL)**로 설정해야 합니다.
+ 함수는 뷰어 요청 및 오리진 요청 이벤트에 대한 쿼리 문자열을 만들거나 업데이트할 수 있습니다(오리진 요청 이벤트는 Lambda@Edge에만 있음).
+ 함수는 쿼리 문자열을 읽을 수 있지만 오리진 응답 및 뷰어 응답 이벤트에 대해 쿼리 문자열을 만들거나 업데이트할 수는 없습니다(오리진 응답 이벤트는 Lambda@Edge에만 있음).
+ 함수가 쿼리 문자열을 만들거나 업데이트하는 경우 다음과 같은 제한이 적용됩니다.
  + 쿼리 문자열에는 공백, 제어 문자 또는 조각 ID(`#`)가 포함될 수 없습니다.
  + 쿼리 문자열을 포함한 URI 및 총 크기는 8,192자 미만이어야 합니다.
  + URI 및 쿼리 문자열에 퍼센트 인코딩을 사용하는 것이 좋습니다. 자세한 내용은 [URI, 쿼리 문자열 및 헤더 인코딩](#function-restrictions-encoding) 섹션을 참조하세요.

## URI
<a name="function-restrictions-uri"></a>

함수가 요청의 URI를 변경하는 경우 이로 인해 요청 또는 요청이 전달되는 오리진에 대한 캐시 동작이 변경되지 않습니다.

쿼리 문자열을 포함한 URI 및 총 크기는 8,192자 미만이어야 합니다.

## URI, 쿼리 문자열 및 헤더 인코딩
<a name="function-restrictions-encoding"></a>

엣지 함수에 전달된 URI, 쿼리 문자열 및 헤더 값은 UTF-8로 인코딩됩니다. 함수는 반환하는 URI, 쿼리 문자열 및 헤더 값에 대해 UTF-8 인코딩을 사용해야 합니다. 퍼센트 인코딩은 UTF-8 인코딩과 호환됩니다.

다음 목록에서는 CloudFront가 URI, 쿼리 문자열 및 헤더 값 인코딩을 처리하는 방법을 설명합니다.
+ 요청의 값이 UTF-8로 인코딩되면 CloudFront는 값을 변경하지 않고 해당 함수로 바로 전달합니다.
+ 요청의 값이 [ISO 8859-1로 인코딩](https://en.wikipedia.org/wiki/ISO/IEC_8859-1)되면 CloudFront는 값을 UTF-8 인코딩으로 변환한 후 함수에 전달합니다.
+ 다른 문자 인코딩을 사용하여 요청의 값이 인코딩되는 경우 CloudFront는 값이 ISO-8859-1로 인코딩된 것으로 가정하고 ISO-8859-1에서 UTF-8로 변환하려고 시도합니다.
**중요**  
변환된 문자는 원래 요청에 있는 값의 부정확한 해석일 수 있습니다. 이 경우 해당 함수 또는 오리진에서 의도하지 않은 결과가 생성될 수 있습니다.

CloudFront가 오리진에 전달하는 URI, 쿼리 문자열 및 헤더 값은 함수가 값을 변경하는지 여부에 따라 달라집니다.
+ 함수가 URI, 쿼리 문자열 또는 헤더를 변경하지 않는 경우 CloudFront는 CloudFront가 요청에서 수신한 값을 오리진으로 전달합니다.
+ 함수가 URI, 쿼리 문자열 또는 헤더를 변경하는 경우 CloudFront는 UTF-8로 인코딩된 값을 전달합니다.

## Microsoft Smooth Streaming
<a name="function-restrictions-microsoft-smooth-streaming"></a>

Microsoft Smooth Streaming 형식으로 변환한 미디어 파일을 스트리밍하는 데 사용하는 CloudFront 배포에는 엣지 함수를 사용할 수 없습니다.

## 태그 지정
<a name="function-restrictions-tagging"></a>

엣지 함수에 태그를 추가할 수 없습니다. CloudFront의 태그 지정에 대한 자세한 내용은 [배포 태깅](tagging.md) 섹션을 참조하세요.