نحوه مدیریت تغییر مسیرها

برخی از زبان های برنامه نویسی دارای پیاده سازی HTTP هستند که برای تغییر مسیر نیاز به مدیریت خاصی دارند.

در پاسخ به درخواست REST API، سرور Nest API یک تغییر مسیر را برمی‌گرداند. مشتری REST تغییر مسیر را شناسایی می کند و صفحه ای را که مشتری به آن هدایت شده است درخواست می کند. برخی از پیاده‌سازی‌های HTTP هدر Authorization را به URI هدایت‌شده ارسال نمی‌کنند و این منجر به خطای 401 Unauthorized می‌شود.

به عنوان مثال، فرض کنید برای foo.com درخواست می کنید. سرور foo.com با تغییر مسیر به bar.com پاسخ می دهد. Postman یا Curl هدر Authorization را به foo و سپس به bar ارسال می کند. سایر پیاده سازی های HTTP، مانند Golang و Python، به طور خودکار هدر Authorization را به 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 نسخه 7.58، سرصفحه‌های مجوز سفارشی به URL تغییر مسیر که توسط API بازگردانده شده است، ارسال نمی‌شوند.

برای توضیح این مورد در curl >= v7.58، از پرچم --location-trusted با هر فراخوانی خط فرمان استفاده کنید.