Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

리디렉션 처리 방법

일부 프로그래밍 언어에는 리디렉션에 대한 특별한 처리가 필요한 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/ 위치를 저장하고 모든 후속 요청을 이 URI에 직접 수행합니다.

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

더 리디렉션 속도 제한 관련 방법에 대한 내용은 참조 데이터 속도 제한을 .

curl을 사용하여 API 테스트

curl >= v7.58을 사용하는 경우 리디렉션과 관련된 API 호출에서 401 Unauthorized 오류가 발생할 수 있습니다. curl v7.58부터 사용자 정의 Authorization 헤더는 API에서 반환된 리디렉션 URL로 전달되지 않습니다.

컬> = v7.58에 이것에 대한 계정에 사용 --location-trusted 있는 명령 행 호출을 플래그.