이 페이지에서는 App Engine 애플리케이션이 HTTP 및 HTTPS 요청을 수행하고 응답을 수신하는 방법을 설명합니다. App Engine 애플리케이션에서 HTTP 및 HTTPS 요청을 수행하는 방법을 보여주는 코드 샘플은 HTTP(S) 요청 실행을 참조하세요.
요청
App Engine 자바 8 런타임에서는java.net.URLConnection
추상 클래스와 자바 표준 라이브러리의 관련 클래스를 사용하여 자바 애플리케이션에서 HTTP 및 HTTPS 연결을 설정할 수 있습니다.
또는 App Engine URL Fetch API를 사용할 수도 있습니다. 이 API는 URL Fetch API를 사용하여 URLConnection
에 정의된 메서드의 구현을 제공합니다. 기본 자바 클래스와 URL Fetch API 사용을 비교한 정보는 자바 8에서 URL Fetch 대신 표준 자바 호출을 사용할 때의 이점을 참조하세요.
요청 프로토콜
애플리케이션은 HTTP 또는 HTTPS를 사용하여 URL을 가져올 수 있습니다. 사용되는 프로토콜은 대상 URL의 프로토콜에 따라 유추됩니다.
가져올 URL은 다음 범위의 포트 번호를 사용할 수 있습니다.
80
-90
440
-450
1024
-65535
포트가 URL에 명시되지 않은 경우 프로토콜의 기본 포트가 사용됩니다. HTTP 요청은 포트 80
에서, HTTPS 요청은 포트 443
에서 수행됩니다.
요청 메서드
표준 자바java.net.URLConnection
클래스를 통해 요청을 수행하는 경우 지원되는 모든 HTTP 메서드를 사용할 수 있습니다.URL Fetch 서비스를 통해 요청을 수행하는 경우 다음과 같은 HTTP 메서드를 사용할 수 있습니다.
GET
POST
PUT
HEAD
DELETE
PATCH
요청은 HTTP 헤더를 포함할 수 있으며 POST
, PUT
, PATCH
요청의 경우에는 페이로드를 포함할 수 있습니다.
요청에 프록시 사용
URL Fetch 서비스는 HTTP/1.1 호환 프록시를 사용하여 결과를 가져옵니다.
애플리케이션에서 요청 무한 반복이 발생할 우려가 있으므로 요청 핸들러가 자신의 URL을 가져오는 것은 금지되어 있습니다. 그러나 다른 방법으로도 무한 반복이 발생할 수 있으므로, 애플리케이션이 사용자가 제공한 URL에 대한 요청을 가져올 수 있는 경우에는 특히 주의가 필요합니다.
요청 헤더
애플리케이션은 발신 요청에 HTTP 헤더를 설정할 수 있습니다.
HTTP POST
요청을 보낼 때 Content-Type
헤더가 명시적으로 설정되어 있지 않으면 헤더는 x-www-form-urlencoded
로 설정됩니다.
이 콘텐츠 유형은 웹 양식에 사용됩니다.
보안상의 이유로 다음 헤더는 애플리케이션에서 수정할 수 없습니다.
Content-Length
Host
Vary
Via
X-Appengine-Inbound-Appid
X-Forwarded-For
X-ProxyUser-IP
이러한 헤더는 App Engine에서 정확한 값으로 적절히 설정됩니다. 예를 들어 App Engine은 요청 데이터에서 Content-Length
헤더를 계산하여 요청에 추가한 후 전송합니다.
다음 헤더는 요청하는 앱의 애플리케이션 ID를 나타냅니다.
User-Agent
. 이 헤더는 수정할 수 있지만 서버가 App Engine 요청을 식별할 수 있도록 App Engine이 식별자 문자열을 추가합니다. 추가되는 문자열은"AppEngine-Google; (+http://code.google.com/appengine; appid: APPID)"
형식이며, 여기서APPID
는 앱의 식별자입니다.X-Appengine-Inbound-Appid
. 이 헤더를 수정할 수 없으며 이후 리디렉션 매개변수가False
로 설정된 경우 URL Fetch 서비스를 통해 요청이 전송되면 자동으로 헤더가 추가됩니다.
요청 제한시간
요청의 기한 또는 제한 시간을 설정할 수 있습니다. 기본적으로 요청 제한 시간은 10초입니다.
최대 기한은 HTTP(S) 요청의 경우 60초, 태스크 큐 및 크론 작업 요청의 경우 60초입니다.
URL Fetch에서 URLConnection
추상 클래스를 사용할 때 서비스는 연결 제한 시간(setConnectTimeout()
)과 읽기 제한 시간(setReadTimeout()
)을 기한으로 사용합니다.
동기 요청과 비동기 요청을 전송할 수 있습니다. 다음 동작은 URL Fetch API에 적용됩니다.
- 동기 요청: 원격 호스트가 결과를 반환할 때까지 가져오기 호출이 대기한 후 애플리케이션에 컨트롤을 반환합니다. 가져오기 호출의 최장 대기 시간이 초과되면 호출이 예외를 발생시킵니다.
- 비동기 요청: URL Fetch 서비스가 요청을 시작한 후 즉시 객체를 반환합니다. URL을 가져오는 동안 애플리케이션이 다른 태스크를 수행할 수 있습니다. 애플리케이션은 결과가 필요하면 객체에서 메서드를 호출하고, 객체는 필요에 따라 요청이 완료되기를 기다린 후 결과를 반환합니다. 요청 핸들러가 종료될 때 보류 중인 URL Fetch 요청이 있으면 애플리케이션 서버는 사용자에게 응답을 반환하기 전에 남은 모든 요청이 결과를 반환하거나 기한에 도달할 때까지 기다립니다.
보안 연결 및 HTTPS
애플리케이션은 HTTPS로 보안 서버에 연결하여 안전하게 URL을 가져올 수 있습니다. 이렇게 하면 요청 및 응답 데이터가 암호화된 형식으로 네트워크를 통해 전송됩니다.
URL Fetch API를 사용하는 경우 URL Fetch 프록시는 연결 중인 호스트를 검증하지 않습니다. 프록시 서버는 HTTPS를 사용할 때 App Engine과 원격 호스트 사이의 중간자 공격을 감지할 수 없습니다.
URLFetchService
API의 FetchOptions
클래스를 사용하여 호스트 검증을 사용 설정할 수 있습니다.
응답
URL Fetch API를 사용하는 경우 URL Fetch 서비스는 응답, 코드, 헤더, 본문을 포함하여 모든 응답 데이터를 반환한다는 점에 주의하세요.
기본적으로 URL Fetch 서비스는 리디렉션 코드가 포함된 응답을 수신하면 해당 리디렉션을 따릅니다. 서비스는 최대 5개까지 리디렉션 응답을 따른 후 최종 리소스를 반환합니다. 사용자는 URL Fetch 서비스가 리디렉션을 따르지 않도록 지정하고 그 대신 리디렉션 응답을 애플리케이션에 반환하도록 지정할 수 있습니다.
개발 서버에서 URL 가져오기 사용
사용자 컴퓨터의 App Engine 개발 서버에서 애플리케이션이 실행되는 경우 URL Fetch 서비스에 대한 호출이 로컬로 처리됩니다. 개발 서버는 컴퓨터에서 인터넷 액세스에 사용 중인 모든 네트워크 구성을 통해 사용자 컴퓨터에서 직접 원격 호스트에 연결하여 URL을 가져옵니다.
URL을 가져오는 애플리케이션의 기능을 테스트할 때는 컴퓨터가 원격 호스트에 액세스할 수 있는지 확인해야 합니다.
URL 가져오기의 할당량 및 한도
자바 런타임의 경우 URLFetch 대신 표준 자바java.net.URLConnection
API를 사용할 수 있습니다. 이 경우 이러한 할당량 및 한도는 적용되지 않습니다.URL Fetch 서비스의 할당량에 대한 자세한 내용은 할당량을 참조하세요. 애플리케이션이 현재 사용 중인 할당량을 보려면 Google Cloud Console의 할당량 세부정보 페이지로 이동합니다.
또한 URL Fetch 서비스를 사용할 때 다음과 같은 한도가 적용됩니다.
한도 | 용량 |
---|---|
요청 크기 | 10MB |
요청 헤더 크기 | 16KB(이 값은 헤더에 지정할 수 있는 URL의 최대 길이를 제한함) |
응답 크기 | 32MB |
최대 기한(요청 핸들러) | 60초 |
최대 기한(작업 대기열 및 크론 작업 핸들러) | 60초 |
다음 단계
HTTP(S) 요청 실행에서 코드 샘플을 실행하고 애플리케이션에서 요청을 수행하는 방법을 알아봅니다.