Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

リダイレクトの処理方法

一部のプログラミング言語には、リダイレクトに特別な処理を必要とするHTTP実装があります。

REST APIリクエストに応答して、NestAPIサーバーはリダイレクトを返します。 RESTクライアントはリダイレクトを検出し、クライアントがリダイレクトされたページを要求します。一部のHTTP実装は、AuthorizationヘッダーをリダイレクトされたURIに転送しないため、401Unauthorizedエラーが発生します。

たとえば、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の不正エラーが発生する場合があります。 curl v7.58以降、カスタムAuthorizationヘッダーはAPIによって返されるリダイレクトURLに転送されません。

カール> = v7.58、上の本を説明するために使用--location-trusted任意のコマンドライン呼び出しでフラグを。