리전 ID
REGION_ID
는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r
이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.
리전 ID에 대해 자세히 알아보세요.
이 참조 페이지에서는 App Engine에서 지원되는 HTTP 헤더와 요청 및 응답 한도를 자세히 설명합니다. App Engine이 요청을 수신하고 응답을 전송하는 방법은 요청 처리 방법을 참조하세요.
요청 헤더
수신되는 HTTP 요청에는 클라이언트가 전송한 HTTP 헤더가 포함되어 있습니다. 보안을 위해 일부 헤더는 애플리케이션에 도달하기 전에 중간 프록시에 의해 제거, 수정 또는 삭제됩니다.
수신 요청에서 헤더가 삭제됨
클라이언트가 헤더를 보내면 다음 헤더는 수신 요청에서 삭제됩니다.
헤더의 이름이
X-Google-*
패턴과 일치합니다. 이 이름 패턴은 Google에 예약되어 있습니다.헤더의 이름이 App Engine 관련 헤더와 일치합니다. 대소문자를 구분하지 않는 일치 항목만 삭제됩니다. 예를 들어
X-Appengine-Country
또는X-AppEngine-Country
라는 헤더는 삭제되지만X-Appengine-Cntry
는 삭제되지 않습니다.
Accept-Encoding
Connection
Keep-Alive
Proxy-Authorization
TE
Trailer
Transfer-Encoding
예를 들어 서버는 Accept-Encoding
요청 헤더에 따라 자동으로 gzipped 응답을 보낼 수 있습니다. 애플리케이션 자체는 클라이언트가 어느 콘텐츠 인코딩을 수락할 수 있는지 알 필요가 없습니다.
요청 및 WSGI
서버는 요청의 URL을 앱 구성 파일의 URL 패턴과 비교하여 호출할 Python 애플리케이션 객체를 결정합니다. 그런 다음 서버는 WSGI 표준에 정의된 대로 인수를 사용하여 애플리케이션 객체를 호출합니다. 애플리케이션 객체는 요청에 적합한 작업을 수행한 다음 응답을 준비하여 문자열 목록으로 반환합니다.
대부분의 애플리케이션은 webapp2와 같은 프레임워크를 사용하여 WSGI 요청을 처리합니다.
webapp2
는 Python 2.7 런타임의 일부로 포함됩니다.
요청 및 CGI
서버는 요청의 URL을 앱 구성 파일의 URL 패턴과 비교하여 실행할 Python 핸들러 스크립트를 결정합니다. 그런 다음 특정 환경에서 요청 데이터가 채워진 스크립트를 실행합니다. CGI 표준에 설명되어 있는 바와 같이, 서버는 요청 데이터를 환경 변수와 표준 입력 스트림에 배치합니다. 스크립트는 요청에 적합한 작업을 수행한 후 응답을 준비하고 표준 출력 스트림에 배치합니다.
대부분의 애플리케이션은 CGI 요청을 구문 분석하여 CGI 응답을 반환하기 위해 Python 표준 라이브러리의 cgi 모듈 같은 라이브러리나 CGI 프로토콜을 인식하는 웹 프레임워크(예: webapp)를 사용합니다. CGI 문서에서 환경 변수와 입력 스트림 데이터의 형식에 관한 자세한 내용을 참조할 수 있습니다.
App Engine 관련 헤더
앱에 대한 서비스로서, App Engine은 다음 헤더를 모든 요청에 추가합니다.
X-Appengine-Country
- ISO 3166-1 alpha-2 국가 코드로 표시되는 요청이 시작된 국가입니다.
App Engine은 클라이언트의 IP 주소로부터 이 코드를 확인합니다. 국가 정보는 WHOIS 데이터베이스에서 파생되지 않습니다. 따라서 WHOIS 데이터베이스의 국가 정보가 포함된 IP 주소가
X-Appengine-Country
헤더에 국가 정보가 없을 가능성이 있습니다. 애플리케이션은 특수 국가 코드ZZ
(알 수 없는 국가)를 처리해야 합니다. X-Appengine-Region
- 요청이 시작된 리전의 이름입니다. 이 값은
X -Appengine-Country
에 지정된 국가를 기준으로 적용됩니다. 예를 들어 국가가 'US'이고 지역이 'ca'일 때, 'ca'는 캐나다가 아닌 '캘리포니아'를 의미합니다. 유효한 리전 값의 전체 목록은 ISO-3166-2 표준을 참조하세요. X-Appengine-City
- 요청이 시작된 도시의 이름입니다. 예를 들어 Mountain View 시의 요청은 헤더 값
mountain view
를 가질 수 있습니다. 이 헤더에 유효한 값의 표준 목록은 없습니다. X-Appengine-CityLatLong
- 요청이 시작된 도시의 위도 및 경도입니다. 이 문자열은 Mountain View에서의 요청의 경우 '37.386051,-122.083851'과 같이 표시될 수 있습니다.
X-Cloud-Trace-Context
- Cloud Trace 및 Cloud Logging에 사용된 요청의 고유 식별자입니다. 모든 App Engine 표준 환경 앱이 자동으로 추적되므로 이 헤더를 중지하거나 trace용 샘플링 레이트를 선택할 수 있는 옵션이 없습니다.
X-Forwarded-For: [CLIENT_IP(s)], [global forwarding rule IP]
클라이언트 요청의 경로를 지정할 때 사용된 쉼표로 구분된 IP 주소 목록입니다. 이 목록의 첫 번째 IP는 일반적으로 요청을 만든 클라이언트의 IP입니다. 이후 IP는 애플리케이션 서버에 도달하기 전 요청을 처리하는 데 사용된 프록시 서버에 대한 정보를 제공합니다. 예를 들면 다음과 같습니다.
X-Forwarded-For: clientIp, proxy1Ip, proxy2Ip
X-Forwarded-Proto [http | https]
클라이언트가 애플리케이션에 연결하는 데 사용한 프로토콜을 기반으로
http
또는https
를 표시합니다.Google Cloud 부하 분산기는 모든
https
연결을 종료한 후http
을 통해 App Engine 인스턴스로 트래픽을 전달합니다. 예를 들어 사용자가https://PROJECT_ID.REGION_ID.r.appspot.com
를 통해 사이트에 대한 액세스를 요청하면 X-Forwarded-Proto 헤더 값은https
가 됩니다.
또한 App Engine은 App Engine에서 내부적으로 사용하는 다음 헤더를 설정할 수 있습니다.
X-Appengine-Https
X-Appengine-User-IP
X-Appengine-Api-Ticket
X-Appengine-Request-Log-Id
X-Appengine-Default-Version-Hostname
X-Appengine-Timeout-Ms
app.yaml
에 지정된login:admin
또는login:required
핸들러의 경우 App Engine은 다음 헤더 집합을 추가합니다.X-Appengine-User-Email
, 헤더 예: 'ange@example.com'X-Appengine-Auth-Domain
,헤더 예: 'example.com'X-Appengine-User-ID
, 헤더 예: '100979712376541954724'X-Appengine-User-Nickname
, 헤더 예: 'ange'X-Appengine-User-Organization
, 헤더 예: 'example.com'X-Appengine-User-Is-Admin
, 헤더 예: '1'
크론 서비스의 요청은 다음 헤더를 추가합니다.
X-Appengine-Cron: true
자세한 내용은 크론 URL 보안을 참조하세요.
요청하는 앱이 URL Fetch 서비스를 사용하는 경우 다른 App Engine 애플리케이션에서 시작되는 요청에는 요청하는 앱을 식별하는 헤더가 포함됩니다.
X-Appengine-Inbound-Appid
자세한 내용은 앱 ID 문서를 참조하세요.
요청 응답
이 HTTP 헤더 문서는 수신 HTTP 요청에 대한 응답에만 적용됩니다. 응답은 클라이언트에 반환되기 전에 수정될 수 있습니다. App Engine 코드에서 시작되는 발신 요청과 관련한 HTTP 헤더에 대해서는 URLFetch 헤더 문서를 참조하세요.
삭제되는 헤더
다음 헤더는 무시되며 응답에서 삭제됩니다.
Connection
Content-Encoding
*Content-Length
Date
Keep-Alive
Proxy-Authenticate
Server
Trailer
Transfer-Encoding
Upgrade
* App Engine에서 응답을 압축한다면 다시 추가될 수 있습니다.
이름이나 값에 ASCII가 아닌 문자가 포함된 헤더도 삭제됩니다.
추가 또는 대체되는 헤더
다음 헤더는 응답에 추가되거나 대체됩니다.
Cache-Control
,Expires
,Vary
이 헤더는 Google 프런트엔드 및 인터넷 서비스 제공업체(ISP) 같은 중간 웹 프록시와 브라우저에 캐시 정책을 지정합니다. 앱에서 이러한 헤더를 설정할 경우 보통은 헤더가 수정되지 않지만, 앱에
Set-Cookie
헤더가 있거나 관리자 계정으로 로그인한 사용자를 위해 응답이 생성된 경우는 예외입니다.앱에
Set-Cookie
응답 헤더가 설정되어 있는 경우Cache-Control
헤더는private
(이미 더 제한적이지 않은 경우)로 설정되며,Expires
헤더는 현재 날짜로 설정됩니다(과거에 이미 설정되지 않은 경우). 이렇게 되면 일반적으로 브라우저는 응답을 캐시하지만 중간 프록시 서버는 응답을 캐시하지 않습니다. 이는 보안을 위한 것으로, 응답이 공개적으로 캐시되면 다른 사용자가 이후에 동일한 리소스를 요청하여 최초 사용자의 쿠키를 획득할 위험이 있기 때문입니다.webob 기반 프레임워크(예: webapp 또는 webapp2)를 사용하는 경우 프레임워크는 기본적으로
Cache-Control
헤더를no-cache
로 설정하므로 스크립트 핸들러에서 캐싱을 하려면 이를 재정의해야 합니다.앱이
Cache-Control
응답 헤더를 설정하지 않으면 서버에서 응답 헤더를private
으로 설정하고Vary: Accept-Encoding
헤더를 추가할 수 있습니다.Google 프런트엔드에서 지원하는
Vary
값 목록을 비롯해 캐싱에 대한 자세한 내용은 응답 캐싱을 참조하세요.Content-Encoding
요청 헤더와 응답의
Content-Type
에 따라서는 서버가 위의 설명과 같이 응답 본문을 자동으로 압축할 수 있습니다. 이 경우Content-Encoding: gzip
헤더를 추가하여 본문이 압축되었음을 나타냅니다. 자세한 내용은 응답 압축 섹션을 참조하세요.Content-Length
또는Transfer-Encoding
서버는 항상 애플리케이션에서 반환된
Content-Length
헤더를 무시합니다. 압축 후Content-Length
를 본문의 길이(압축된 경우 압축 후 길이)로 설정하거나,Content-Length
를 삭제하고 분할 전송 인코딩을 사용하여Transfer-Encoding: chunked
헤더를 추가합니다.Content-Type
애플리케이션에서 지정하지 않으면 서버에서 기본값인
Content-Type: text/html
헤더를 설정합니다.Date
현재 날짜와 시간으로 설정합니다.
Server
Google Frontend
로 설정합니다. 개발 서버에서는 이 값을Development/x
로 설정합니다. 여기서 x는 버전 번호입니다.
관리자 계정으로 로그인한 상태에서 사이트의 동적 페이지에 액세스하면 App Engine은 응답 헤더에 요청별 통계를 넣습니다.
X-Appengine-Resource-Usage
- 요청에 사용된 리소스로서 서버 측 시간(밀리초)이 포함됩니다.
리소스 사용 통계를 포함하는 응답은 캐시할 수 없습니다.
애플리케이션의 응답에 X-Appengine-BlobKey
헤더가 있는 경우, 본문을 blobstore blob 콘텐츠의 전체 또는 일부로 교체할 때 이 헤더와 선택사항인 X-Appengine-BlobRange
헤더가 사용됩니다. 애플리케이션에서 Content-Type
을 지정하지 않으면 blob의 MIME 유형으로 설정됩니다. 범위가 요청되면 응답 상태가 206 Partial Content
로 변경되고 Content-Range
헤더가 추가됩니다. X-Appengine-BlobKey
및 X-Appengine-BlobRange
헤더는 응답에서 삭제됩니다. blobstore_handlers.BlobstoreDownloadHandler
클래스가 헤더를 설정하므로 일반적으로 이러한 헤더는 직접 설정할 필요가 없습니다. 자세한 내용은 blob 제공을 참조하세요.
애플리케이션 구성에서 설정하는 응답 헤더
애플리케이션의 구성 파일에 동적 및 정적 경로의 URL별로 커스텀 HTTP 응답 헤더를 설정할 수 있습니다. 자세한 내용은 구성 문서의 http_headers
섹션을 참조하세요.