โฮมเพจ » ทำอย่างไร » ทำไมบางครั้งเว็บเบราว์เซอร์ของฉันไม่สามารถแสดงเวลาดาวน์โหลดที่เหลืออยู่ได้

    ทำไมบางครั้งเว็บเบราว์เซอร์ของฉันไม่สามารถแสดงเวลาดาวน์โหลดที่เหลืออยู่ได้

    บางครั้งมาตรวัดความคืบหน้าการดาวน์โหลดที่ซื่อสัตย์ในเบราว์เซอร์ของคุณ (หรือแอปพลิเคชั่นอื่น ๆ ) เพียงแค่เอื้อมมือไปในอากาศและยอมแพ้ในการแสดงเวลาดาวน์โหลดที่เหลือ เหตุใดบางครั้งมันถึงเวลาดาวน์โหลดที่คาดการณ์ไว้และบางครั้งก็ไม่สามารถรายงานได้ทั้งหมด?

    เซสชั่นคำถามและคำตอบในวันนี้มาถึงเราด้วยความอนุเคราะห์จาก SuperUser - แผนกย่อยของ Exchange Exchange ซึ่งเป็นกลุ่มที่ขับเคลื่อนด้วยชุมชนของเว็บไซต์ถาม - ตอบ.

    คำถาม

    Coldblackice ผู้อ่าน SuperUser ต้องการทราบว่าทำไมเบราว์เซอร์ของเขาจึงไม่สกปรกเสมอไป:

    บางครั้งเมื่อดาวน์โหลดไฟล์ในเว็บเบราว์เซอร์ความคืบหน้าการดาวน์โหลดจะไม่“ รู้” ขนาดรวมของไฟล์หรือขนาดของไฟล์ที่ดาวน์โหลดไปไกลเท่าไหร่ - มันเพิ่งแสดงความเร็วในการดาวน์โหลดด้วยจำนวนทั้งหมด เป็น "ไม่ทราบ".

    เหตุใดเบราว์เซอร์จะไม่ทราบขนาดสุดท้ายของไฟล์บางไฟล์ มันจะรับข้อมูลนี้ได้ที่ไหนในตอนแรก?

    อยู่ที่ไหนแน่นอน?

    คำตอบ

    ผู้สนับสนุน SuperUser Gronostaj เสนอข้อมูลเชิงลึกดังต่อไปนี้:

    ในการขอเอกสารจากเว็บเซิร์ฟเวอร์เบราว์เซอร์ใช้โปรโตคอล HTTP คุณอาจทราบชื่อจากแถบที่อยู่ของคุณ (อาจถูกซ่อนไว้ในตอนนี้ แต่เมื่อคุณคลิกที่แถบที่อยู่ให้คัดลอก URL และวางในตัวแก้ไขข้อความคุณจะเห็น http: // ที่จุดเริ่มต้น) มันเป็นโปรโตคอลที่ใช้ข้อความอย่างง่ายและทำงานได้เช่นนี้:

    ก่อนอื่นเบราว์เซอร์ของคุณเชื่อมต่อกับเซิร์ฟเวอร์ของเว็บไซต์และส่ง URL ของเอกสารที่ต้องการดาวน์โหลด (หน้าเว็บเป็นเอกสารด้วย) และรายละเอียดบางอย่างเกี่ยวกับตัวเบราว์เซอร์ (User-Agent ฯลฯ ) ตัวอย่างเช่นในการโหลดหน้าหลักในเว็บไซต์ SuperUser, http://superuser.com/, เบราว์เซอร์ของฉันส่งคำขอที่มีลักษณะดังนี้:

    GET / HTTP / 1.1 โฮสต์: superuser.com การเชื่อมต่อ: Keep-alive ยอมรับ: text / html, แอปพลิเคชัน / xhtml + xml, แอปพลิเคชัน / xml; q = 0.9, * / *; q = 0.8 ผู้ใช้ตัวแทน: Mozilla / 5.0 ( Windows NT 6.1; WOW64) ยอมรับการเข้ารหัส: gzip, deflate, sdch ยอมรับภาษา: pl-PL, pl; q = 0.8, en-US; q = 0.6, en; q = 0.4 คุกกี้: [ลบเพื่อความปลอดภัย] DNT : 1 If-Modified- ตั้งแต่: อังคาร, 09 กรกฎาคม 2013 07:14:17 GMT 

    บรรทัดแรกระบุว่าเอกสารใดที่เซิร์ฟเวอร์ควรส่งคืน บรรทัดอื่น ๆ เรียกว่าส่วนหัว; พวกเขามีลักษณะเช่นนี้:

    ชื่อส่วนหัว: ค่าส่วนหัว 

    บรรทัดเหล่านี้ส่งข้อมูลเพิ่มเติมที่ช่วยให้เซิร์ฟเวอร์ตัดสินใจว่าจะทำอย่างไร.

    หากทุกอย่างเรียบร้อยเซิร์ฟเวอร์จะตอบกลับโดยส่งเอกสารที่ร้องขอ การตอบสนองเริ่มต้นด้วยข้อความสถานะตามด้วยส่วนหัวบางส่วน (พร้อมรายละเอียดเกี่ยวกับเอกสาร) และสุดท้ายหากเนื้อหาทั้งหมดเป็นอย่างดีเนื้อหาของเอกสาร นี่คือความคิดเห็นของเซิร์ฟเวอร์ SuperUser สำหรับคำขอของฉัน:

    HTTP / 1.1 200 OK การควบคุมแคช: public, max-age = 60 Content-Type: text / html; charset = utf-8 หมดอายุ: Tue, 09 Jul 2013 07:27:20 GMT แก้ไขล่าสุด: Tue, 09 Jul 2013 07:26:20 GMT แตกต่างกันไป: * X-Frame-Options: SAMEORIGIN วันที่: Tue, 09 Jul 2013 07:26:19 GMT ความยาวเนื้อหา: 139672 [… snip …]  

    หลังจากบรรทัดสุดท้ายเซิร์ฟเวอร์ของ SuperUser ปิดการเชื่อมต่อ.

    บรรทัดแรก (HTTP / 1.1 200 ตกลง) มีรหัสการตอบกลับในกรณีนี้คือ 200 ตกลง. หมายความว่าเซิร์ฟเวอร์จะส่งคืนเอกสารตามที่ร้องขอ เมื่อเซิร์ฟเวอร์ไม่จัดการให้ทำเช่นนั้นรหัสจะเป็นอย่างอื่น: คุณคงเคยเห็น ไม่พบ 404, และ 403 ต้องห้าม เป็นเรื่องธรรมดาเช่นกัน จากนั้นส่วนหัวติดตาม.

    เมื่อเบราว์เซอร์พบบรรทัดว่างในการตอบกลับจะรู้ว่าทุกอย่างที่ผ่านมาบรรทัดนั้นคือเนื้อหาของเอกสารที่ร้องขอ ดังนั้นในกรณีนี้  เป็นบรรทัดแรกของรหัสหน้าแรกของ SuperUser หากฉันขอให้ดาวน์โหลดเอกสารอาจเป็นอักขระที่พูดพล่อยๆเนื่องจากรูปแบบเอกสารส่วนใหญ่ไม่สามารถอ่านได้โดยไม่ต้องดำเนินการก่อน.

    กลับไปที่ส่วนหัว สิ่งที่น่าสนใจที่สุดสำหรับเราคือสิ่งสุดท้าย, ความยาวของเนื้อหา. มันแจ้งให้เบราว์เซอร์ทราบจำนวนไบต์ของข้อมูลที่ควรคาดหวังหลังจากบรรทัดว่างดังนั้นโดยทั่วไปแล้วขนาดของเอกสารที่แสดงเป็นไบต์ ส่วนหัวนี้ไม่บังคับและอาจถูกละเว้นโดยเซิร์ฟเวอร์ บางครั้งขนาดของเอกสารไม่สามารถคาดการณ์ได้ (ตัวอย่างเช่นเมื่อเอกสารถูกสร้างขึ้นอย่างฉับพลัน) บางครั้งโปรแกรมเมอร์ที่ขี้เกียจไม่รวมมัน (มักพบได้ทั่วไปในเว็บไซต์ดาวน์โหลดไดรเวอร์) บางครั้งเว็บไซต์จะถูกสร้างโดยมือใหม่ที่ไม่รู้ ของส่วนหัวดังกล่าว.

    อย่างไรก็ตามไม่ว่าเหตุผลใดก็ตามส่วนหัวอาจหายไป ในกรณีนี้เบราว์เซอร์ไม่ทราบว่าเซิร์ฟเวอร์จะส่งข้อมูลไปเท่าใดและแสดงขนาดเอกสารเป็น ไม่ทราบ, รอให้เซิร์ฟเวอร์ปิดการเชื่อมต่อ และนี่คือสาเหตุของขนาดเอกสารที่ไม่รู้จัก.


    มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่ ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่.