Google стремится продвигать расовую справедливость для черных сообществ. Смотри как.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

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

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

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

Например, предположим, что вы запрашиваете foo.com. Сервер foo.com отвечает перенаправлением на bar.com. Почтальон или Керл передают заголовок авторизации в foo, а затем в бар. Другие реализации 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.

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

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

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

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

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