אופטימיזציה של פרוטוקולים: HTTP/2, HTTP/3 (QUIC) לאתר מהיר

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הגדרת HTTP/2 לא האיצה את האתר: היכן אובדת מהירות התגובה

HTTP/2 מופעל בקונפיגורציה עדיין אינו אומר שהדף ייטען מהר יותר. הפרוטוקול מספק ריבוב (multiplexing) — עשרות משאבים עוברים בחיבור אחד — אך אם בפרימטר עומד פרוקסי או מאזן עומסים שמסיים את ההצפנה ויוצא לבקנד בערוץ נפרד, כל התועלת נשארת על הנייר. מבחוץ הכול מוגדר, אך תגובת דפים איטית מוסברת בקטע אחר לגמרי.

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

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

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

מה נותנת הגדרת HTTP/2: תגובת דפים ללא תור בקשות

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

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

התקן מתואר ב-IETF, ושם גם מוגדרת התנהגות השרתים: ללא משקלים מפורשים הלקוח מנחש בעצמו, ולא פעם התמונה עוקפת את CSS.

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

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

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

השוואת גישות: HTTP/2, HTTP/3 וסכימת תגובה היברידית

בחירת גרסת הפרוטוקול אינה «להפעיל חדש ולראות», אלא שאלה של תאימות עם מצבת הלקוחות בפועל. HTTP/2 מעל ערוץ מוצפן נותן ריבוב בקשות ודחיסת כותרות, אך כל הזרמים עוברים דרך ערוץ TCP אחד: אובדן חבילה עוצר את טעינת כל הדף.

HTTP/3 ו-QUIC מעבירים את ניהול הזרמים לתעבורה — ברשתות סלולריות עם אובדנים ההשלמה מהירה במידה ניכרת.

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

אפשרות מתי מתאימה מגבלות
HTTP/2 מעל ערוץ מוצפן מצבת לקוחות לא הומוגנית, צוואר הבקבוק — תגובת הבקנד ערוץ TCP אחד: אובדן חבילות מאט את כל הזרמים
סכימת תגובה היברידית רוב הפרויקטים: התעבורה החדשה ראשית, הקיימת — גיבוי נדרשים שליטה של מאזן העומסים ומטריקות משתי התעבורות
מעבר מלא ל-HTTP/3 ו-QUIC שיעור גבוה של תעבורה סלולרית ורשתות עם אובדנים חלק מהרשתות הארגוניות חוסמות UDP — בלי נסיגה מפורשת אי אפשר
HTTP/1.1 הנוכחי שירותים פנימיים עם מספר קטן של בקשות במקביל אין ריבוב, תקרה במספר החיבורים

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

סדר העבודות: מביקורת חיבורים ועד מסירת נהלים

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

שבעה שלבים

  1. ביקורת חיבורים — מבררים אילו גרסאות פרוטוקול מסוכמות עם לקוחות בפועל, היכן מסתיימת ההצפנה ואילו צמתי ביניים מפריעים לריבוב.
  2. מדידת השהיות — מתעדים קו בסיס: זמן הקמת החיבור, מספר סבבי רשת עד לתשובה הראשונה, שיעור הבקשות בפרוטוקול החדש.
  3. סכימת מעבר התעבורה — מסלול הבקשה מהלקוח עד האפליקציה: מאזן עומסים, פרוקסי הפוך, רשת אספקה, מטמון. בלעדיה ההגדרה נעשית בעיוורון.
  4. הגדרת הפרימטר — מפעילים את הפרוטוקול בכניסה, מתקנים עדיפויות זרמים, מכסות בקשות במקביל וטיימאאוטים; הקונפיגורציה מנוהלת בגרסאות.
  5. בדיקה על עותק תעבורה — משקפים את הזרם ומריצים תרחישי עומס, בהשוואה לקו הבסיס: שגיאות הסכמה נראות עוד לפני ההשקה.
  6. השקה וניטור — מפעילים על חלק מהתעבורה, עוקבים אחר שיעור החיבורים המוצלחים וזמן התגובה; נסיגה — בעריכת קונפיגורציה אחת.
  7. מסירת נהלים — הסכימה, הקונפיגורציות במערכת בקרת גרסאות, צ'קליסט אבחון וסדר הנסיגה נשארים בידי הצוות שלכם.

המדידות לפני ואחרי עוברות ללקוח: לפיהן רואים מה בדיוק נתן המעבר והאם יש טעם להתקדם לגרסה השלישית של הפרוטוקול.

ערכת מסירה: קונפיגורציות, סכימות ונוהל נסיגה

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

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

מקרה בוחן: זמן תגובת הקטלוג הצטמצם פי שלושה

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

מה שינו בפרימטר

הפעילו HTTP/2: בקשות של אותו עמוד עוברות בחיבור יחיד, דחיסת כותרות מסירה קוקיז ומטא-נתונים חוזרים, ועדיפויות מקצות רוחב פס למשאבים קריטיים. לפלח הסלולרי הוסיפו HTTP/3 מעל QUIC — אובדן חבילה כבר לא מאט את שאר הזרמים, והחזרה לסשן אינה דורשת הסכמה מלאה מחדש על הערוץ המוצפן. במקביל כיווננו מאגר חיבורים לאפליקציה ו-keep-alive כך שהחיבור ישמש מחדש ולא ייווצר מחדש לכל בקשה.

מה יצא

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

מתי המעבר ל-HTTP/3 מניב רווח ומתי לא

ההבדל בין HTTP/3 ל-HTTP/2 הוא בתעבורה, ולא בכותרות. השני עובד מעל TCP, שבו אובדן חבילה אחת עוצר את אספקת כל הבקשות המקבילות עד לשחזור החלון, ואילו השלישי עובד מעל QUIC: הזרמים בלתי תלויים זה בזה, ולחיצת היד והקמת הערוץ המוצפן משולבות. מכאן הכלל — התועלת בולטת יותר ככל שהערוץ גרוע יותר.

ברשתות סלולריות ובמסלולים רחוקים אובדנים של 2–5% וסבבי רשת מיותרים מצטברים לשניות של המתנה. קיצור לחיצת היד והיעדר חסימת תור מקטינים את הזמן לבית הראשון ואת אחוזון 95 של הטעינה, בעוד שבערוץ יציב בתוך אותה עיר ההבדל נבלע ברעש, והגדרת HTTP/2 נותנת את אותה תוצאה במורכבות קטנה יותר.

התמיכה בצד הלקוח אינה הומוגנית: דפדפנים עדכניים תומכים, ואילו רכיבים מובנים באפליקציות, ספריות ישנות ופרוקסים ארגוניים — לרוב לא, וחלק ממסנני התעבורה חוסמים UDP לחלוטין. לכן HTTP/2 נשאר שכבת הבסיס, ו-HTTP/3 מופעל כתוספת ובמקרה כשל נסוג אוטומטית.

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

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

ספקות טכניים לפני החלפת פרוטוקול התגובה

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

האם איזון העומסים יישבר?

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

כיצד זה משפיע על המטמון?

כללי המטמון וכותרות הוולידציה אינם משתנים — הסביבה משתנה: CDN וצמתי ביניים חייבים לתמוך בפרוטוקול החדש, ואיחוד הבקשות לדומיין מסבך את הפרדת המטמון.

מה עם פרוקסים ביניים?

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

אפשר להטמיע בשלבים?

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

האם לקוחות ישנים יפסיקו לעבוד?

לא. הגרסה מסוכמת בעת הקמת החיבור, ולקוח ללא תמיכה מקבל HTTP/1.1. התנאי היחיד — תעודה תקינה ומערכת משאבים זהה בשני הענפים.

נדון במשימה: שלחו את סכימת תגובת התעבורה

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

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

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

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

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