Notice: We're retiring Works with Nest. See the home page for more information.
Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기
이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

리디렉션 처리 방법

일부 프로그래밍 언어에는 리디렉션을 특수하게 처리해야하는 HTTP 구현이 있습니다.

REST API 요청에 대한 응답으로 Nest API 서버는 리디렉션을 반환합니다. REST 클라이언트는 경로 재 지정을 감지하고 클라이언트가 경로 재 지정된 페이지를 요청합니다. 일부 HTTP 구현은 Authorization 헤더를 경로 재 지정된 URI로 전달하지 않으므로 401 Unauthorized 오류가 발생합니다.

예를 들어, foo.com을 요청한다고 가정하십시오. foo.com 서버는 bar.com으로 리디렉션하여 응답합니다. Postman 또는 Curl은 Authorization 헤더를 foo에 전달한 다음 bar에 전달합니다. Golang 및 Python과 같은 다른 HTTP 구현은 Authorization 헤더를 리디렉션 된 URI로 자동 전달하지 않습니다.

작동 원리

다음 시퀀스 다이어그램은 리디렉션이 발생할 때 발생하는 상황을 보여줍니다.

순서 재 지정

비교를 위해 다음은 리디렉션이 발생하지 않을 때 발생하는 상황입니다.

리디렉션 시퀀스가 ​​없습니다

일반적으로 언어의 HTTP 구현이 Authorization 헤더를 통과하지 못할 것으로 예상하는 것이 좋습니다.

코드는 자동 리디렉션을 방지하고 헤더를 다시 추가 한 후 리디렉션 호출을 수행해야합니다.

예를 들어 Go에서 다음을 수행 할 수 있습니다.

customClient := http.Client {
    CheckRedirect: func(redirRequest *http.Request, via []*http.Request)
    error {
        // Go's http.DefaultClient does not forward headers when a redirect 3xx
        // response is received. Thus, the header (which in this case contains the
        // Authorization token) needs to be passed forward to the redirect
        // destinations.
        redirRequest.Header = req.Header

        // Go's http.DefaultClient allows 10 redirects before returning an
        // an error. We have mimicked this default behavior.s
        if len(via) >= 10 {
            return errors.New("stopped after 10 redirects")
        }
        return nil
    },
}

자세한 예는 다음을 참조하십시오.

리디렉션 된 위치 저장

리디렉션 된 위치를 사용자별로 저장하는 것이 좋습니다. 즉, 사용자가 로그인하여 리디렉션을 수신 한 후에 firebase-apiserver03-tah01-iad01.dapi.production.nest.com:9553/ location을 저장하고 모든 후속 요청을이 URI에 직접 작성하십시오.

리디렉션 된 위치를 저장하면 시간이 절약되고 불필요한 서버로드가 방지됩니다.

리디렉션이 속도 제한과 관련되는 방법에 대한 자세한 내용은 데이터 속도 제한을 참조하십시오.

curl을 사용하여 API 테스트

curl> = v7.58을 사용하면 리디렉션이 포함 된 API 호출에서 401 Unauthorized 오류가 발생할 수 있습니다. curl v7.58부터 사용자 정의 권한 부여 헤더는 API가 리턴 한 경로 재 지정 URL로 전달되지 않습니다.

curl> = v7.58에서이를 설명하려면 --location-trusted 플래그를 명령 줄 호출과 함께 사용하십시오.