1. ספרייה
  2. HTTP והרשת
  3. קודי סטטוס HTTP

עודכן לפני חודש

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

200 אומר "הנה לך." 404 אומר "מעולם לא שמעתי על זה." 500 אומר "נשברתי."

המספרים בני שלוש הספרות האלה הם אוצר המילים של כל שיחה ברשת.

אוצר המילים של השרת

תגובות HTTP מתחילות עם שורת סטטוס:

HTTP/1.1 200 OK

ה-200 הוא מה שחשוב. "OK" הוא רק בשביל בני אדם שקוראים לוגים. כל לקוח HTTP — דפדפנים, אפליקציות, סקריפטים — מקבל החלטות על בסיס המספר הזה בלבד.

הספרה הראשונה אומרת לכם את הקטגוריה:

  • 1xx: "רגע, אני עובד על זה"
  • 2xx: "הנה מה שביקשתם"
  • 3xx: "זה לא כאן, אבל אני יודע היכן"
  • 4xx: "שאלתם לא נכון"
  • 5xx: "נשברתי"

המשמעות היא שאתם יכולים להבין כל קוד סטטוס שמעולם לא ראיתם. אם מישהו אומר לכם שקיבל 418, אתם יודעים שזו שגיאת לקוח — הבקשה הייתה הבעיה, לא השרת.

הקודים שחשובים

הצלחה (2xx)

200 OK — הבקשה עבדה. הנה הנתונים שלכם.

201 Created — הבקשה עבדה, ויצרתי משהו חדש. כשאתם שולחים POST של משתמש חדש ומקבלים 201, השרת אומר "סיימתי, הוא קיים עכשיו."

204 No Content — הבקשה עבדה, אבל אין מה לשלוח בחזרה. נפוץ אחרי בקשות DELETE — הדבר נמחק, אין מה להוסיף.

הפניות מחדש (3xx)

301 Moved Permanently — "הכתובת הזו השתנתה לצמיתות. עדכנו את הרשומות שלכם." דפדפנים ומנועי חיפוש זוכרים את זה.

302 Found — "זה נמצא זמנית במקום אחר." הכתובת המקורית עדיין תקפה; זהו רק עיקוף זמני.

304 Not Modified — "כבר יש לכם את הגרסה העדכנית." זה חוסך רוחב פס. הדפדפן שלכם שאל "האם זה השתנה?" והשרת ענה "לא, השתמשו בעותק השמור שלכם."

שגיאות לקוח (4xx)

אלה הם קודי "אתם טעיתם".

400 Bad Request — "אני לא מצליח להבין מה אתם מבקשים." JSON שגוי, פרמטרים חסרים, שגיאות תחביר.

401 Unauthorized — "מי אתם?" לא הזדהיתם. הציגו אישורים.

403 Forbidden — "אני יודע מי אתם, ואתם לא יכולים לעשות את זה." הזדהיתם, אבל אין לכם הרשאה.

ההבחנה בין 401 ל-403 מבלבלת אנשים. חשבו על שומר בכניסה: 401 הוא "הראו לי תעודה מזהה." 403 הוא "אני רואה את התעודה שלכם, אבל אתם לא ברשימה."

404 Not Found — "חיפשתי. זה לא כאן." זה לא שגיאה במובן של משהו שנשבר — זוהי תגובה תקפה לחלוטין שאומרת שהמשאב פשוט אינו קיים.

429 Too Many Requests — "האטו." הגעתם למגבלת קצב. המתינו ונסו שוב מאוחר יותר.

שגיאות שרת (5xx)

אלה הם קודי "נשברתי". הבקשה הייתה תקינה; השרת לא הצליח לטפל בה.

500 Internal Server Error — "משהו השתבש ואני לא יודע מה." הקוד הכוללני לכשלים בלתי צפויים. בדקו את לוגי השרת.

502 Bad Gateway — "אני פרוקסי, והשרת שמאחוריי החזיר לי תגובה גרועה." נפוץ עם מאזני עומסים כששרתי הגב נכשלים.

503 Service Unavailable — "אני עמוס מדי או בתחזוקה." לרוב כולל כותרת Retry-After המציעה מתי לנסות שוב.

504 Gateway Timeout — "אני פרוקסי, והשרת שמאחוריי לא ענה בזמן."

למה זה חשוב

קודי סטטוס מאפשרים למכונות לקבל החלטות מבלי להבין שפה. הדפדפן שלכם לא מפרש הודעות שגיאה — הוא רואה 301 ועוקב אחרי ההפניה, רואה 401 ומבקש סיסמה, רואה 304 וטוען מהמטמון.

זה חשוב עבור:

ניפוי שגיאות — כשמשהו לא עובד, קוד הסטטוס אומר לכם היכן לחפש. 4xx אומר שהבקשה שגויה. 5xx אומר שהשרת שבור. 3xx אומר שאתם מועברים למקום אחר. זה מצמצם שעות של חקירה לשניות.

בניית API — החזרת קוד הסטטוס הנכון הופכת את ה-API שלכם לצפוי. לקוחות יכולים לטפל ב-404 אחרת מ-500 מבלי לפרש את הודעות השגיאה שלכם.

מטמון — דפדפנים שומרים במטמון על בסיס קודי סטטוס. הפניות 301 יכולות להישמר במטמון לצמיתות. תגובות 200 נשמרות במטמון לפי כותרות. 304 אומר במפורש "המטמון שלכם תקף."

SEO — מנועי חיפוש משתמשים בקודי סטטוס להבנת האתר שלכם. 301 מעביר דירוג לכתובת החדשה. 404 מסיר את הדף מהאינדקס. 302 שומר על הכתובת המקורית באינדקס.

טעויות נפוצות

החזרת 200 לשגיאות — כמה API מחזירים 200 OK עם {"error": "not found"} בגוף התגובה. זה שובר את הסמנטיקה של HTTP. לקוחות לא יכולים להבחין בין הצלחה לכישלון מבלי לפרש את הגוף. השתמשו ב-404.

שימוש ב-302 כשמתכוונים ל-301 — אם משהו עבר לצמיתות, אמרו זאת. 302 אומר לדפדפנים ולמנועי חיפוש שהכתובת הישנה עדיין תקפה.

בלבול בין 401 ל-403 — 401 אומר "הזדהו." 403 אומר "גם מזוהים, אתם לא יכולים." אם מישהו מחובר אבל חסרות לו הרשאות, זה 403, לא 401.

התייחסות ל-404 כשגיאה — 404 אינו תקלה; הוא ישיר. השרת חיפש, לא מצא דבר, ואמר לכם. זו התנהגות נכונה.

קריאת קודי סטטוס

בכלי הפיתוח של הדפדפן (F12, לשונית Network), כל בקשה מציגה את קוד הסטטוס שלה. בעת ניפוי שגיאות:

  • 200 אבל הדף נראה לא נכון: הבקשה עבדה; הבעיה היא בעיבוד או בנתונים
  • 301/302: אתם מופנים מחדש — בדקו את כותרת Location
  • 401: אימות חסר או לא תקף
  • 403: מזוהים אך לא מורשים
  • 404: כתובת ה-URL שגויה או המשאב אינו קיים
  • 500: באג בשרת — בדקו לוגי שרת
  • 502/503/504: בעיית תשתית בינכם לבין השרת בפועל

השיחה

קודי סטטוס HTTP מצמצמים את אינספור התוצאות האפשריות של הרשת לאוצר מילים ברור וידוע. כל בקשה מקבלת תגובה. כל תגובה מתחילה עם מספר. המספר הזה עונה על השאלה הבסיסית: האם זה עבד?

היופי הוא בכנות. שרת לא מתחזה שהכל בסדר כשזה לא. הוא אומר 500 כשהוא נשבר. הוא אומר 404 כשמשהו חסר. הוא אומר 401 כשהוא לא יודע מי אתם.

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

שאלות נפוצות על קודי סטטוס HTTP

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

401 אומר "הזדהו" — השרת לא יודע מי אתם. 403 אומר "אסור" — השרת יודע מי אתם אבל חסרות לכם הרשאות. אם לא התחברתם, זה 401. אם התחברתם אבל מנסים לגשת לדפי ניהול כמשתמש רגיל, זה 403.

למה לפעמים אני רואה 200 OK אבל הדף מציג שגיאה?

כמה אפליקציות מחזירות 200 לכל דבר ומכניסות שגיאות לגוף התגובה. זוהי שיטה גרועה — היא שוברת את הסמנטיקה של HTTP ומקשה על ניפוי שגיאות. API מתוכנן כהלכה משתמש בקודי סטטוס מתאימים כדי שלקוחות יוכלו לטפל בשגיאות מבלי לפרש את גוף התגובה.

האם כדאי לשמור תגובות 404 במטמון?

כן, 404 ניתן לשמירה במטמון כברירת מחדל. אם משאב אינו קיים, שאלות חוזרות לא ישנו זאת. עם זאת, אם האפליקציה שלכם עשויה ליצור את המשאב בקרוב, תוכלו להשתמש בכותרות Cache-Control כדי להגביל כמה זמן שומרים תגובות 404 במטמון.

מה אומר 418 "אני קומקום"?

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

למה אני מקבל 502 Bad Gateway כשהאתר נראה תקין עבור אחרים?

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

האם דף זה היה מועיל?

😔
🤨
😃