Google is committed to advancing racial equity for Black communities. See how.

Как обрабатывать перенаправления

Некоторые языки программирования имеют реализации HTTP, которые требуют специальной обработки перенаправлений.

В ответ на запрос REST API сервер Nest API возвращает перенаправление. Клиент REST обнаруживает перенаправление и запрашивает страницу, на которую был перенаправлен клиент. Некоторые реализации HTTP не пересылают заголовок авторизации перенаправленному URI, что приводит к ошибке 401 Unauthorized.

Например, предположим, что вы запрашиваете foo.com. Сервер foo.com отвечает перенаправлением на bar.com. Postman или Curl передают заголовок авторизации в foo, а затем в bar. Другие реализации HTTP, такие как Golang и Python, не передают автоматически заголовок авторизации перенаправленному URI.

Как это работает

На следующей диаграмме последовательности показано, что происходит при перенаправлении.

Последовательность перенаправления

Для сравнения, вот что происходит, когда перенаправления не происходит.

Нет последовательности переадресации

Пример

Как правило, рекомендуется ожидать, что реализация HTTP на вашем языке не сможет передать заголовок авторизации.

Ваш код должен предотвращать автоматическое перенаправление и выполнять вызов перенаправления после добавления заголовков обратно.

Например, в 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.

Сохранение перенаправленного местоположения экономит время и предотвращает ненужную нагрузку на сервер.

Чтобы узнать больше о том , как переадресовывает связаны с ограничением скорости, см скорость передачи данных Limits .

Использование curl для тестирования API

При использовании curl> = v7.58 вы можете получить 401 неавторизованную ошибку при вызовах API, которые включают перенаправления. Начиная с curl v7.58, пользовательские заголовки авторизации не перенаправляются на URL-адрес перенаправления, возвращаемый API.

С учетом этого на завиток> = v7.58, используйте --location-trusted флаг с любой командной строки вызовов.