Αρχική σελίδα » πως να » Γιατί το πρόγραμμα περιήγησης στο Web μου μερικές φορές αποτυγχάνει να εμφανίσει τις υπόλοιπες ώρες λήψης;

    Γιατί το πρόγραμμα περιήγησης στο Web μου μερικές φορές αποτυγχάνει να εμφανίσει τις υπόλοιπες ώρες λήψης;

    Μερικές φορές ο πιστός μετρητής προόδου λήψης στο πρόγραμμα περιήγησής σας (ή άλλη εφαρμογή) απλώς ρίχνει τα χέρια του στον αέρα και παραιτείται από την εμφάνιση του υπόλοιπου χρόνου λήψης. Γιατί μερικές φορές καρφώνει ο προβλεπόμενος χρόνος λήψης και μερικές φορές αποτυγχάνει να τα αναφέρει όλα μαζί?

    Η σημερινή συνάντηση ερωτήσεων και απαντήσεων έρχεται σε επαφή με το SuperUser - μια υποδιαίρεση του Stack Exchange, μια κοινότητα που κατευθύνεται από τους ιστότοπους ερωτήσεων & απαντήσεων.

    Το ερώτημα

    Ο αναγνώστης του SuperUser Coldblackice θέλει να ξέρει γιατί το πρόγραμμα περιήγησης του δεν ταιριάζει πάντα με τη βρωμιά:

    Περιστασιακά, κατά τη λήψη ενός αρχείου σε ένα πρόγραμμα περιήγησης ιστού, η πρόοδος λήψης δεν "γνωρίζει" το συνολικό μέγεθος του αρχείου ή πόσο μακριά κατά τη λήψη είναι - δείχνει απλώς την ταχύτητα με την οποία κατεβάζει, με ένα σύνολο ως "Άγνωστο".

    Γιατί το πρόγραμμα περιήγησης δεν γνωρίζει το τελικό μέγεθος ορισμένων αρχείων; Από πού παίρνει αυτές τις πληροφορίες κατά πρώτο λόγο?

    Όπου πράγματι?

    Οι απαντήσεις

    Ο συνεργάτης του SuperUser Gronostaj προσφέρει την ακόλουθη εικόνα:

    Για να ζητήσετε έγγραφα από διακομιστές ιστού, τα προγράμματα περιήγησης χρησιμοποιούν το πρωτόκολλο HTTP. Μπορεί να γνωρίζετε αυτό το όνομα από τη γραμμή διευθύνσεών σας (μπορεί να είναι κρυμμένο τώρα, αλλά όταν κάνετε κλικ στη γραμμή διευθύνσεων, αντιγράψτε τη διεύθυνση URL και επικολλήστε την σε κάποιο πρόγραμμα επεξεργασίας κειμένου, θα δείτε http: // στην αρχή). Είναι ένα απλό πρωτόκολλο με βάση το κείμενο και λειτουργεί ως εξής:

    Αρχικά, το πρόγραμμα περιήγησής σας συνδέεται με τον διακομιστή του ιστότοπου και αποστέλλει μια διεύθυνση URL του εγγράφου που επιθυμεί να μεταφορτώσει (επίσης ιστοσελίδες είναι έγγραφα) και κάποιες λεπτομέρειες σχετικά με το ίδιο το πρόγραμμα περιήγησης (User-Agent κ.λπ.). Για παράδειγμα, για να φορτώσετε την κύρια σελίδα στην τοποθεσία SuperUser, http://superuser.com/, το πρόγραμμα περιήγησής μου στέλνει ένα αίτημα που μοιάζει με αυτό:

    GET / HTTP / 1.1 Υποδοχή: superuser.com Σύνδεση: κρατήστε ζωντανή Αποδοχή: text / html, application / xhtml + xml, application / xml; Windows NT 6.1, WOW64) Αποδοχή-Κωδικοποίηση: gzip, deflate, sdch Αποδοχή-Γλώσσα: PL-PL, : 1 Εάν-Τροποποιήθηκε-Από: Τρι, 09 Ιούλ 2013 07:14:17 GMT 

    Η πρώτη γραμμή καθορίζει ποιο έγγραφο θα πρέπει να επιστρέψει ο διακομιστής. Οι άλλες γραμμές ονομάζονται κεφαλίδες. μοιάζουν με αυτό:

    Όνομα κεφαλίδας: τιμή κεφαλίδας 

    Αυτές οι γραμμές στέλνουν πρόσθετες πληροφορίες που βοηθούν τον διακομιστή να αποφασίσει τι να κάνει.

    Αν όλα είναι καλά, ο διακομιστής θα απαντήσει στέλνοντας το απαιτούμενο έγγραφο. Η απάντηση ξεκινάει με ένα μήνυμα κατάστασης, ακολουθούμενο από κάποιες κεφαλίδες (με λεπτομέρειες για το έγγραφο) και τέλος, αν όλα είναι καλά, το περιεχόμενο του εγγράφου. Αυτό είναι το αποτέλεσμα της απάντησης του διακομιστή SuperUser για το αίτημά μου:

    HTTP / 1.1 200 ΟΚ Διαχείριση κρυφής μνήμης: δημόσιο, max-age = 60 Τύπος περιεχομένου: text / html; charset = utf-8 Λήξη: Τρι, 09 Jul 2013 07:27:20 GMT Τελευταία τροποποίηση: Τρι, 09 Ιούλ 2013 07:26:20 GMT Vary: * X-Frame-Επιλογές: SAMEORIGIN Ημερομηνία: Τρι, 09 Ιούλ 2013 07:26:19 GMT Περιεχόμενο-Μήκος: 139672 [... snip ...]  

    Μετά την τελευταία γραμμή, ο διακομιστής του SuperUser κλείνει τη σύνδεση.

    Η πρώτη γραμμή (HTTP / 1.1 200 ΟΚ) περιέχει τον κωδικό απάντησης, στην περίπτωση αυτή είναι 200 Εντάξει. Σημαίνει ότι ο διακομιστής θα επιστρέψει ένα έγγραφο, όπως ζητήθηκε. Όταν ο διακομιστής δεν καταφέρει να το κάνει, ο κώδικας θα είναι κάτι άλλο: ίσως έχετε δει 404 δεν βρέθηκε, και 403 απαγορευμένο είναι αρκετά συνηθισμένο. Στη συνέχεια ακολουθούν οι κεφαλίδες.

    Όταν ο περιηγητής βρει μια κενή γραμμή στην απάντηση, ξέρει ότι τα πάντα πέρα ​​από αυτή τη γραμμή είναι το περιεχόμενο του εγγράφου που ζήτησε. Έτσι σε αυτή την περίπτωση  είναι η πρώτη γραμμή του κώδικα της αρχικής σελίδας του SuperUser. Εάν ζητούσα ένα έγγραφο για λήψη, θα ήταν πιθανώς μερικοί κακοί χαρακτήρες, επειδή οι περισσότερες μορφές εγγράφων είναι δυσανάγνωστες χωρίς προηγούμενη επεξεργασία.

    Επιστροφή στις κεφαλίδες. Το πιο ενδιαφέρον για εμάς είναι το τελευταίο, Περιεχόμενο-Μήκος. Ενημερώνει το πρόγραμμα περιήγησης πόσα byte δεδομένων θα πρέπει να περιμένουν μετά την κενή γραμμή, έτσι ουσιαστικά είναι το μέγεθος του εγγράφου που εκφράζεται σε bytes. Αυτή η κεφαλίδα δεν είναι υποχρεωτική και μπορεί να παραλειφθεί από το διακομιστή. Μερικές φορές το μέγεθος του εγγράφου δεν μπορεί να προβλεφθεί (για παράδειγμα, όταν το έγγραφο δημιουργείται εν πτήσει), μερικές φορές οι τεμπέληδες προγραμματιστές δεν το συμπεριλαμβάνουν (αρκετά συνηθισμένοι στους ιστότοπους λήψης προγραμμάτων οδήγησης), μερικές φορές οι ιστοτόποι δημιουργούνται από αρχάριους που δεν γνωρίζουν μιας τέτοιας επικεφαλίδας.

    Τέλος πάντων, όποιος κι αν είναι ο λόγος, η κεφαλίδα μπορεί να λείπει. Σε αυτή την περίπτωση, το πρόγραμμα περιήγησης δεν γνωρίζει πόσα δεδομένα θα στείλει ο διακομιστής και έτσι εμφανίζει το μέγεθος του εγγράφου ως άγνωστος, περιμένοντας τον διακομιστή να κλείσει τη σύνδεση. Και αυτός είναι ο λόγος για άγνωστα μεγέθη εγγράφων.


    Έχετε κάτι να προσθέσετε στην εξήγηση; Απενεργοποιήστε τα σχόλια. Θέλετε να διαβάσετε περισσότερες απαντήσεις από άλλους τεχνολογικούς χρήστες Stack Exchange; Δείτε το πλήρες νήμα συζήτησης εδώ.