שגיאת HTTP 401 לעומת שגיאת HTTP 403 - הסבר על תגובות קוד מצב

כבר כיסינו את קוד שגיאת ה- HTTP 403 (אסור) בפירוט מסוים, אך יש לו גם אח כמעט זהה.

אז מה בדיוק ההבדל בין קודי הסטטוס 401 (לא מורשים) לבין 403 (אסור)? אין ספק שהם מתכוונים לאותו הדבר? בואו נסתכל מקרוב!

תקני RFC

תקן ה- RFC המעודכן ביותר המגדיר 401 (לא מורשה) הוא RFC 7235

קוד המצב 401 (לא מורשה) מציין שהבקשה לא הוחלה מכיוון שחסרים אישורי אימות חוקיים עבור משאב היעד ... סוכן המשתמש עשוי לחזור על הבקשה בשדה כותרת הרשאה חדש או מוחלף.

ואילו 403 (אסור) הוגדר לאחרונה ב- RFC 7231

קוד הסטטוס 403 (אסור) מציין שהשרת הבין את הבקשה אך מסרב לאשר אותה ... אם ניתנו אישורי אימות בבקשה, השרת רואה בהם לא מספיק כדי להעניק גישה.

סיבות שכיחות

כאמור במאמר הקודם, השגיאה 403 יכולה להיווצר כאשר משתמש התחבר אך אין להם הרשאות מספיקות לגשת למשאב המבוקש. לדוגמא, משתמש כללי עשוי לנסות לטעון מסלול 'מנהל'.

הפעם הברורה ביותר שתיתקל בשגיאת 401, לעומת זאת, היא כאשר לא התחברת כלל או שסיפקת את הסיסמה השגויה.

אלה שני הגורמים השכיחים ביותר לצמד שגיאות זה.

גורם פחות שכיח

ישנם מקרים שבהם זה לא פשוט כמו זה.

שגיאות 403 יכולות להתרחש בגלל מגבלות שאינן תלויות לחלוטין באישורי המשתמש המחובר.

לדוגמא, שרת יכול לנעול משאבים מסוימים כדי לאפשר גישה רק ממגוון מוגדר מראש של כתובות IP, או עשוי להשתמש בחסימת גיאוגרפיה. אפשר לעקוף את האחרון באמצעות VPN.

שגיאות 401 יכולות להתרחש גם אם המשתמש מזין את האישורים הנכונים. זה נדיר, ועשוי להיות משהו שאתה רק באמת נתקל בו בעת פיתוח קצות גב מאומתים משלך. אך אם כותרת ההרשאה לא תקפה, היא תחזיר 401.

לדוגמה, ייתכן שיהיה בכותרת הבקשה JWT (JSON Web Token) שברצונך לכלול, המצפה לפורמט Authorization: Bearer eyJhbGci......yJV_adQssw5c. אם תשכח את המילה 'נושא' לפני ה- JWT, היית נתקל בשגיאת 401.

נתקלתי בעצמי בבעיה זו כאשר בדקתי ממשקי API שנמצאים בפיתוח עם דואר ושכחתי את התחביר הנכון לכותרות האותיות!

זהו זה

אני מקווה שזה יבהיר כל בלבול סביב שגיאות דומות מאוד.

אם מצאת את זה מועיל, או שאתה רוצה לאתגר או להרחיב כל דבר שהועלה כאן, אל תהסס לפנות אלי בטוויטר @JacksonBates.