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 있는 명령 행 호출을 플래그.