HTTP(S) 요청 전송

리전 ID

REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.

리전 ID에 대해 자세히 알아보세요.

이 페이지는 App Engine 앱에서 HTTP(S) 요청을 전송하는 방법을 설명합니다.

요청 크기 한도 및 URL Fetch 요청을 통해 전송되는 헤더에 대한 자세한 내용은 아웃바운드 요청을 참조하세요.

HTTP 요청 실행

아웃바운드 HTTP 요청을 전송하려면 평소와 같이 http 패키지를 사용하되 urlfetch.Client를 사용하여 클라이언트를 만듭니다. urlfetch.Client가 반환하는 *http.Clienturlfetch.Transport를 사용하며, 이는 URL Fetch API를 사용하여 요청을 수행하는 http.RoundTripper 인터페이스를 구현합니다.

다음 스니펫은 기본적인 HTTP GET 요청을 수행하는 방법을 보여줍니다.

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/urlfetch"
)

func handler(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	client := urlfetch.Client(ctx)
	resp, err := client.Get("https://www.google.com/")
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	fmt.Fprintf(w, "HTTP GET returned status %v", resp.Status)
}

리디렉션 사용 중지

URL Fetch를 사용하는 경우 기본 URL Fetch 서비스는 기본적으로 최대 5개의 리디렉션을 따릅니다. 이러한 리디렉션은 승인 헤더와 같은 민감한 정보를 리디렉션된 대상으로 전달할 수 있습니다. 앱에 HTTP 리디렉션이 필요하지 않으면 리디렉션을 사용 중지하는 것이 좋습니다.

URL Fetch 서비스가 리디렉션을 따르지 않도록 지시하려면 http.ErrUseLastResponse를 반환하도록 urlfetch 패키지에서 반환된 http.ClientCheckRedirect 필드를 설정합니다. 이는 appengine/urlfetchappengine/v2/urlfetch에 적용됩니다. 예를 들면 다음과 같습니다.

client := urlfetch.Client(ctx)
client.CheckRedirect = func(*http.Request, []*http.Request) error {
  return http.ErrUseLastResponse
}

HTTPS 요청 실행

Go API에서는 요청을 명시적으로 보호할 필요가 없습니다. 기본 URL 가져오기 서비스는 기본적으로 연결 중인 호스트의 인증서를 검증하고, 인증서가 일치하지 않으면 요청을 거부합니다.

호스트 인증서 검증 중지

호스트 인증서에 대한 자동 검증을 중지하려면 수동으로 Transport를 만들고 AllowInvalidServerCertificatetrue로 설정합니다.

다른 App Engine 앱으로 요청 전송

다른 App Engine 앱에 요청을 전송하는 경우 App Engine 앱은 요청에 X-Appengine-Inbound-Appid 헤더를 추가하여 자신의 ID를 입증해야 합니다. URL Fetch 서비스에 리디렉션을 따르지 않도록 지시하면 App Engine이 헤더를 요청에 자동으로 추가합니다.

리디렉션 사용 중지에 대한 안내는 리디렉션 사용 중지를 참조하세요.

다음 단계

아웃바운드 요청에서 URL Fetch 요청을 통해 전송되는 헤더와 같은 URL Fetch 서비스에 대해 알아보기