לפעמים מד התקדמות ההורדה הנאמן בדפדפן שלך (או ביישום אחר) פשוט זורק את ידיו לאוויר ומוותר על הצגת זמן ההורדה שנותר. מדוע לפעמים הוא ממסמר את זמן ההורדה הצפוי ולעיתים אינו מצליח לדווח על הכל ביחד?
מושב השאלות והתשובות של היום מגיע אלינו באדיבות SuperUser - חלוקה של Stack Exchange, קיבוץ מונחה קהילה של אתרי שאלות ותשובות.
השאלה
קורא SuperUser Coldblackice רוצה לדעת מדוע הדפדפן שלו לא תמיד מנקה את הלכלוך:
לעיתים, בעת הורדת קובץ בדפדפן אינטרנט, התקדמות ההורדה אינה "יודעת" את הגודל הכולל של הקובץ, או עד כמה הוא נמצא בהורדה - הוא מראה רק את מהירות הורדתו, עם סך הכל כ"לא ידוע ".
מדוע הדפדפן לא ידע את הגודל הסופי של קבצים מסוימים? מהיכן הוא משיג מידע זה מלכתחילה?
איפה באמת?
התשובות
תורם SuperUser Gronostaj מציע את התובנה הבאה:
כדי לבקש מסמכים משרתי אינטרנט, הדפדפנים משתמשים בפרוטוקול HTTP. יתכן שאתה מכיר את השם מסרגל הכתובות שלך (ייתכן שהוא מוסתר כעת, אך כאשר תלחץ על שורת הכתובת, העתק את כתובת האתר והדבק אותו בעורך טקסט כלשהו, תראה
http: //בהתחלה). זהו פרוטוקול מבוסס טקסט פשוט והוא עובד כך:ראשית, הדפדפן שלך מתחבר לשרת האתר ושולח כתובת URL של המסמך שהוא רוצה להוריד (גם דפי אינטרנט הם מסמכים) וכמה פרטים על הדפדפן עצמו ( סוכן משתמש וכו). לדוגמא, כדי לטעון את הדף הראשי באתר SuperUser,
http://superuser.com/, הדפדפן שלי שולח בקשה שנראית כך:GET / HTTP / 1.1 מארח: superuser.com חיבור: לשמור על החיים קבל: טקסט / html, יישום / xhtml + xml, יישום / xml; q = 0.9, * / *; q = 0.8 User-Agent: Mozilla / 5.0 (Windows NT 6.1; WOW64) קבל קידוד: gzip, ניפוח, sdch קבל שפה: pl-PL, pl; q = 0.8, en-US; q = 0.6, en; q = 0.4 עוגיה: [removed for security] DNT: 1 אם השתנה מאז: יום שלישי, 09 ביולי 2013 07:14:17 GMTהשורה הראשונה מציינת איזה מסמך השרת צריך להחזיר. השורות האחרות נקראות כותרות ראש; הם נראים כך:
שם כותרת: ערך כותרתשורות אלה שולחות מידע נוסף המסייע לשרת להחליט מה לעשות.
אם הכל בסדר, השרת יגיב באמצעות שליחת המסמך המבוקש. התגובה מתחילה בהודעת סטטוס, ולאחריה כמה כותרות (עם פרטים על המסמך) ולבסוף, אם הכל בסדר, תוכן המסמך. כך נראית התשובה של שרת SuperUser לבקשתי:
HTTP / 1.1 200 בסדר Cache-Control: ציבורי, max-age = 60 סוג תוכן: טקסט / HTML; ערכת = utf-8 תפוג: יום שלישי, 09 יולי 2013 07:27:20 GMT שונה לאחרונה: יום שלישי, 09 יולי 2013 07:26:20 GMT משתנה: * אפשרויות מסגרת X: SAMEORIGIN תאריך: יום שלישי, 09 יולי 2013 07:26:19 GMT אורך תוכן: 139672 <! DOCTYPE html> <html> [...snip...] </html>לאחר השורה האחרונה, השרת של SuperUser סוגר את החיבור.
השורה הראשונה (
HTTP / 1.1 200 בסדר) מכיל את קוד תגובה , במקרה זה זה200 בסדר. המשמעות היא שהשרת יחזיר מסמך, כמתבקש. כאשר השרת לא מצליח לעשות זאת, הקוד יהיה משהו אחר: כנראה שראיתם404 לא נמצא, ואיסור 403גם הוא די נפוץ. ואז הכותרות עוקבות.כאשר הדפדפן מוצא בשורה ריקה בתגובה, הוא יודע שכל מה שעבר בשורה זו הוא תוכן המסמך שביקש. כך במקרה זה
<! DOCTYPE html>היא השורה הראשונה בקוד דף הבית של SuperUser. אם הייתי מבקש להוריד מסמך, סביר להניח שמדובר בתווים מקושקשים, מכיוון שרוב פורמטי המסמך אינם ניתנים לקריאה ללא עיבוד מוקדם.חזרה לכותרות. המעניין ביותר עבורנו הוא האחרון,
אורך תוכן. הוא מודיע לדפדפן לכמה בתים של נתונים הוא צריך לצפות אחרי השורה הריקה, כך שבעצם זה גודל המסמך מבוטא בתים. כותרת זו אינה חובה ועלולה הושמט על ידי השרת. לפעמים לא ניתן לחזות את גודל המסמך (לדוגמא כאשר המסמך נוצר בזמן אמת), לפעמים מתכנתים עצלנים אינם כוללים אותו (די נפוץ באתרי הורדת מנהלי התקנים), לפעמים אתרים נוצרים על ידי משתמשים חדשים שלא יודעים של כותרת כזו.בכל מקרה, תהיה הסיבה אשר תהיה, הכותרת עלולה להיעדר. במקרה כזה הדפדפן לא יודע כמה נתונים השרת ישלח, וכך מציג את גודל המסמך כ לא ידוע , ממתין לשרת לסגור את החיבור. וזו הסיבה לגדלים לא ידועים של מסמכים.