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実装は、リダイレクトされたURIにAuthorizationヘッダーを自動的に渡しません。

使い方

次のシーケンス図は、リダイレクトが発生したときに何が起こるかを示しています。

リダイレクトシーケンス

比較のために、リダイレクトが発生しない場合は次のようになります。

リダイレクトシーケンスなし

一般に、言語の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-i​​ad01.dapi.production.nest.com:9553 /の場所を保存し、以降のすべてのリクエストをこのURIに直接行います。

リダイレクトされた場所を保存すると、時間を節約し、不要なサーバーの負荷を防ぐことができます。

リダイレクトとレート制限の関係の詳細については、 データレート制限を参照してください。

curlを使用してAPIをテストする

curl> = v7.58を使用すると、リダイレクトを含むAPIの呼び出しから401 Unauthorizedエラーが発生する場合があります。 curl v7.58以降、カスタム認証ヘッダーはAPIによって返されるリダイレクトURLに転送されません。

curl> = v7.58でこれを説明するには、コマンドライン呼び出しで--location-trustedフラグを使用します。