מעבר ל-404: סקירה מקיפה של HTTP Status Codes

List of HTTP Status Codes.

הבנת HTTP Status Codes היא קריטית לכל מי שעוסק בפיתוח תוכנה בתחום פיתוח אתרים ואפליקציות ווב. קודים אלו מספקים מידע חשוב על תגובות השרת לבקשות ה-HTTP שאנחנו מבצעים. התגובות האלו, עוזרות לנו להבין האם הייתה בעיה בבקשה, האם הבקשה הצליחה, מידע רלוונטי שאנחנו צריכים לדעת ועוד הרבה! זו הדרך של השרת לדבר איתנו, ואנחנו צריכים להבין את השפה הזו Like a Pro!

Informational responses (100 – 199)

Informational responses לא נפוצות במיוחד בהשוואה ל-HTTP status codes אחרים שנכיר בקרוב. המטרה שלהן היא להודיע ללקוח כי הבקשה התקבלה, אך העיבוד שלה עדיין מתבצע. עם זאת, כפי שציינתי, השימוש בהן היום מועט. בואו נבחן כמה מהם:

  • 100 Continue - משמש לבדיקה אם השרת מוכן לקבל נתונים נוספים לפני שהלקוח שולח עוד מידע.

  • 101 Switching Protocols - מאפשר ללקוח לבקש מהשרת לעבור לפרוטוקול תקשורת אחר, לדוגמה מ-HTTP ל-WebSocket

אבל כמו שאמרתי, אין לכם מה לדאוג לגביהם כי דיי נדיר להשתמש בהם (אם בכלל).

Successful responses (200 – 299)

Successful responses מציינים שהבקשה שנשלחה עברה בהצלחה. כאשר אתם רואים קוד 2xx, זה אומר שהכל בסדר והבקשה עברה בהצלחה. הנה כמה successful responses נפוצים:

  • 200 OK - הבקשה הצליחה, כלומר מה שרצינו לבצע או להשיג, הצליח ואין שום בעיה.

  • 201 Created - הבקשה הצליחה, ונוצר משאב חדש כתוצאה מכך. לדוגמה הוספת פוסט חדש או יוזר חדש למערכת שלנו.

  • 204 No Content - הבקשה הצליחה, ואין לשרת צורך או סיבה לשלוח תוכן בחזרה לצד לקוח. לדוגמה אני רוצה להסיר מהרשימה שלי מוצר מסויים. אני לא חייב לקבל הודעה או תוכן מסויים מהשרת חוץ מה-status code 204 שהפעולה הצליחה ומשם השם No Content.

Redirection messages (300 – 399)

Redirection messages מציינות שהמידע שאנחנו רוצים לקבל, או לשלוח לשרת, הועבר למיקום אחר; כלומר ה-endpoint או פשוט ה-url הועברו לכתובת אחרת. לדוגמה, במקום כתובת www.codingwithsaar.co.il => זה יהיה www.codewithsaar.co.il. כלומר המשאב שאני מחפש (במקרה הזה זה כתובת האתר שלי) הועברה למקום אחר. דוגמאות ל-Redirection messages:

  • 301 Moved Permanently - המשאב הועבר לכתובת חדשה. זה אומר שהמשאב המבוקש כבר לא נמצא בכתובת המקורית והועבר לכתובת חדשה באופן קבוע.

  • 302 (Found) או 307 (Temporary Redirect) - מציין שההפניה היא זמנית, והלקוח צריך לבצע בקשה חדשה לכתובת הנתונה בתגובת השרת, אך לא נדרש לעדכן באופן מוחלט את ה-endpoint או את ה-url לאותו משאב, כי זה זמני.

Client error responses (400 – 499)

תגובות מסוג Client Error מציינות שהבקשה ששלח הלקוח מכילה מידע שגוי ולא ניתן לעבד אותה בהצלחה על ידי השרת. הן נפוצות במקרים של שגיאות קלט (הכנסת נתונים כמו אימייל, סיסמא וכדומה שהם לא נכונים), הרשאות, או נתיבים (endpoints) לא נכונים. דוגמאות ל-Client error responses:

  • 400 Bad Request - שגיאה זו מופיעה כאשר השרת לא מבין את הבקשה שלכם כי משהו לא בסדר במידע ששלחתם אליו. לדוגמה, אם אתם תנסו לשלוח טופס באתר אינטרנט אבל שכחתם למלא את כל השדות הנדרשים, ייתכן שתקבלו 400 Bad Request.

  • 401 Unauthorized - זה אומר שהמשתמש רצה לבצע פעולה מסויימת או לגשת למשאב מסויים אבל השרת דרש קודם כל לאמת את המשתמש, אבל המשתמש לא סיפק או לא הזדהה במערכת בדרך של login או כל הזדהות אחרת כמו טוקן (token). למי שלא מכיר, token הוא כמו תעודת זהות, שמשמשת לאימות זהות של המשתמש ולאפשר לו גישה למשאבים מוגנים. במילים פשוטות, המשתמש צריך להזדהות כדי לקבל גישה למשאב. אם אתם רוצים לקרוא עוד על אימות והרשאות באינטרנט, כנסו למאמר שלנו - אימות והרשאות באינטרנט בעזרת JWT.

  • 403 Forbidden - הבקשה נקלטת והמשתמש מזוהה, אבל המשתמש לא מורשה לגשת למשאב המבוקש. כלומר, השרת הבין את הבקשה אך מסרב לאשר אותה מסיבות שונות, כמו הרשאות לא מתאימות. 403 Forbidden - הבקשה נקלטת והמשתמש מזוהה, אבל המשתמש לא מורשה לגשת למשאב המבוקש. כלומר, השרת הבין את הבקשה אך מסרב לאשר אותה מסיבות שונות, כמו הרשאות לא מתאימות. עכשיו, בדרך כלל הרבה מתכנתים מתבלבלים בין 403 Forbidden לבין 401 Unauthorized, אז בואו נעשה סדר כדי להבין טוב יותר מה אומרת כל בעיה.

    ההבדל בין 401 ל-403

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

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

  • 404 Not Found - השגיאה מתרחשת כאשר המשאב או הדף שהמשתמש מנסה לגשת אליו אינו קיים על השרת. כלומר זה כמו ללכת למסעדה ולבקש לקנות רכב. השרת מסוגל להבין את הבקשה שלכם, אבל המשאב המבוקש (קניית רכב) לא קיימת בשרת (במסעדה). בדרך כלל אתם תראו את זה כשאתם מנסים לבקר בדף באתר, אבל הדף הזה לא קיים.

  • 405 Method Not Allowed - השגיאה מתרחשת כאשר המשתמש, משתמש ב-HTTP Method (כמו GET, POST, PUT, DELETE וכו') שלא נתמכת עבור המשאב המבוקש בשרת. לדוגמה, אם יש לכם משאב (endpoint) שמקבל רק בקשות GET ואתם מנסים לשלוח בקשת POST אליו, השרת יחזיר שגיאת 405 שמציין שה-HTTP Method שנבחרה לא נתמכת עבור המשאב הזה.

  • 406 Not Acceptable - השגיאה מתרחשת כאשר השרת לא יכול לספק תגובה שמתאימה למה שהמשתמש רצה לקבל. לדוגמה, אם הלקוח מבקש תוכן בפורמט מסוים כמו PDF, אבל השרת יכול לתת את המידע הזה רק בפורמט JSON אז השרת יחזיר שגיאת 406.

  • 409 Conflict - השגיאה מתרחשת כאשר יש סתירה או חפיפה במשאב שהמשתמש מנסה ליצור או לעדכן, לדוגמה, כאשר שני משתמשים מנסים להתחבר לחשבון אחד בו זמנית, אחד מהם יקבל שגיאת 409, מציינת שיש קונפליקט בנתונים.

  • 410 Gone - השגיאה מתרחשת כאשר המשאב שהמשתמש מנסה לגשת אליו היה זמין בעבר אך כעת הוסר לצמיתות מהשרת. כלומר אם יש דף אינטרנט שהיה זמין בעבר אך נמחק לצמיתות, בקשה לכתובת ה-URL של הדף הזה תחזיר שגיאת 410 מהשרת.

  • 429 Too Many Requests - השגיאה מתרחשת כאשר המשתמש עשה יותר בקשות מהמותר על ידי השרת. לדוגמה, אם השרת מוגבל ל-100 בקשות לדקה והמשתמש שלח 150 בקשות בדקה, השרת יחזיר שגיאת 429 Too Many Requests.

Server error responses (500 – 599)

תגובות מסוג Server Error מציינות שהשרת נתקל בבעיה בעת ניסיון לעבד את הבקשה שהתקבלה מהלקוח. זה יכול להיות בעיה בקוד של השרת, בקונפיגורציה, במסד נתונים ועוד. דוגמאות ל-Server error responses:

  • 500 Internal Server Error - השגיאה מתרחשת כאשר השרת נתקל בבעיה פנימית, שמונעת אותו מלעבד את הבקשה שהתקבלה מהלקוח. זה יכול להיות בעיה בקוד של השרת, בקונפיגורציה, במסד נתונים ועוד.

  • 501 Not Implemented - שגיאה זו מופיעה כאשר השרת אינו מסוגל או לא תומך בפונקציונליות שהמשתמש ביקש. לדוגמה, אם המשתמש שולח בקשת HTTP עם HTTP Method שהשרת לא מכיר או לא יכול להתמודד איתה, אתם תקבלו בעיית 501. שימו לב שגם כאן יש לא מעט מתכנתים שמתבלבלים בין הבעיה 405 Method Not Allowed לבין 501 Not Implemented, אז בואו נבין מה ההבדל בינהם:

    ההבדל בין 501 לבין בעיה 405

    501 Not Implemented מתייחסת למצב שבו השרת לא תומך ב-HTTP Method שהועברה בבקשה. זה לא אומר שה-HTTP Method לא חוקית, אלא שברגע זה, השרת לא מסוגל להמודד איתה. לדוגמה, השרת עלול להיות חסר יכולת לטפל בבקשות PUT או DELETE בשל מגבלות טכניות או מדיניות פנימית.

    לעומת זאת, 405 Method Not Allowed מציינת שהשרת מזהה ומבין את ה-HTTP Method שנשלחה, אבל היא לא מורשית עבור המשאב המסוים שהלקוח ביקש. למשל, אם משאב כלשהו נגיש רק דרך בקשות GET ומישהו מנסה לשלוח בקשת POST, השרת יחזיר שגיאת 405.

    בקצרה, שגיאת 501 מעידה על חוסר יכולת של השרת לטפל ב-HTTP Method כלשהי, בעוד ששגיאת 405 מציינת שהשימוש ב-HTTP Method מסוימת אסור עבור משאב מסוים.

  • 502 Bad Gateway - מתרחשת כאשר שרת האינטרנט שאנחנו מנסים לגשת אליו מתווך בין הלקוח (הדפדפן, לדוגמה) לבין שרת אחר. השגיאה מופיעה כאשר השרת המתווך נתקל בבעיה בתקשורת עם השרת המטרה, כך שהוא לא מצליח לקבל ממנו תגובה תקינה עבור הבקשה שהתקבלה מהלקוח.

  • 503 Service Unavailable - השגיאה מתרחשת כאשר השרת לא יכול לעבד את הבקשה שהתקבלה מהלקוח כי השרת כרגע לא זמין. זה יכול להיות בגלל עומס גבוה על השרת, תחזוקה, תקלה ועוד.

  • 507 Insufficient Storage - שגיאה זו מתרחשת כאשר השרת לא מסוגל לאחסן את הנתונים שהמשתמש מנסה להעביר בגלל חוסר במקום אחסון פנוי. לדוגמה, אם משתמש מנסה להעלות סרטון גדול מדי לאתר, ואין מספיק מקום פנוי בשרת של האתר, השרת יחזיר שגיאת 507, מציינת שאין מספיק מקום זמין לאחסון הסרטון.

סיכום

כפי שראינו, HTTP Status Codes מספקות מידע חשוב על תגובות השרת לבקשות ה-HTTP שאנחנו מבצעים. התגובות האלו, עוזרות לנו להבין האם הייתה בעיה בבקשה, האם הבקשה הצליחה, מידע רלוונטי שאנחנו צריכים לדעת ועוד הרבה! עכשיו תוכלו להבין טוב יותר את השרת שלכם ומה קורה מאוחרי הקלעים.