14Sep

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

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

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

Η ερώτηση

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

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

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

Πού πράγματι;

Ο συνδρομητής απαντήσεων

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

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

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

GET / HTTP / 1.1 Host: superuser.com Σύνδεση: keep-alive Αποδοχή: text / html/xhtml+xml,application/xml?q=0.9,*/*;q=0.8 User-Agent: Mozilla / 5.0( Windows NT 6.1; WOW64) Αποδοχή-Κωδικοποίηση: gzip, deflate, sdch, pl = q = 0,8, en-US · q = 0,6, en · q = 0,4 Cookie: [αφαιρεθεί για ασφάλεια] DNT:Η γραμμή καθορίζει ποιο έγγραφο θα πρέπει να επιστρέψει ο διακομιστής.Οι άλλες γραμμές ονομάζονται κεφαλίδες.μοιάζουν με αυτό: Όνομα κεφαλίδας: τιμή κεφαλίδας

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

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

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

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

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

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

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

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

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