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

Άποψη: 8759|Απάντηση: 0

Λεπτομερής ερμηνεία του Content-Length στο πρωτόκολλο HTTP

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 24/9/2019 3:53:29 μ.μ. | | |
Το Content-Length χρησιμοποιείται για να περιγράψει το μήκος μεταφοράς του σώματος του μηνύματος. Στο πρωτόκολλο HTTP, υπάρχει διαφορά μεταξύ του μήκους της οντότητας μηνύματος και του μήκους μετάδοσης της οντότητας μηνύματος, για παράδειγμα, υπό συμπίεση gzip, το μήκος της οντότητας μηνύματος είναι το μήκος πριν από τη συμπίεση και το μήκος μετάδοσης της οντότητας μηνύματος είναι το μήκος μετά τη συμπίεση gzip.

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

Εάν η απόκριση είναι 1xx, 204, 304 ή αίτηση κεφαλίδας, το περιεχόμενο της οντότητας μηνύματος παραβλέπεται απευθείας.
Εάν υπάρχει Transfer-Encoding, προτιμάται η μέθοδος στο Transfer-Encoding για να βρεθεί το αντίστοιχο μήκος. Για παράδειγμα, το μοντέλο Chunked.
«Εάν υπάρχει ένα Περιεχόμενο-Μήκος στο κεφάλι, τότε αυτό το Περιεχόμενο-Μήκος αντιπροσωπεύει τόσο το μήκος του σώματος όσο και το μήκος μετάδοσης. Εάν το μήκος της οντότητας και το μήκος μεταφοράς δεν είναι ίσα (π.χ. έχει οριστεί Μεταφορά-Κωδικοποίηση), τότε το Περιεχόμενο-Μήκος δεν μπορεί να οριστεί.Εάν έχει οριστεί Μεταφορά-Κωδικοποίηση, τότε το Περιεχόμενο-Μήκος θα αγνοηθεί”。 Το πλεονέκτημα αυτής της μετάφρασης πρότασης είναι ότι υπάρχει μόνο ένα σημείο: με τη μεταφορά-κωδικοποίηση, δεν μπορεί να υπάρξει μήκος περιεχομένου.
Μετάδοση εμβέλειας. Δεν έδωσα σημασία, δεν το διάβασα λεπτομερώς :)
Το κλείσιμο της σύνδεσης μέσω του διακομιστή καθορίζει τη διάρκεια του μηνύματος που μεταδίδεται. (Ο αιτών δεν μπορεί να υποδείξει το τέλος του σώματος της αίτησης κλείνοντας τη σύνδεση, καθώς αυτό θα άφηνε τον διακομιστή χωρίς καμία πιθανότητα να συνεχίσει να ανταποκρίνεται.) Αυτή η κατάσταση αντιστοιχεί κυρίως σε σύντομες συνδέσεις, δηλαδή σε λειτουργία μη διατήρησης εν ενεργεία.
Το HTTP 1.1 πρέπει να υποστηρίζει τη λειτουργία κομματιού. Επειδή όταν το μήκος του μηνύματος είναι αβέβαιο, αυτή η κατάσταση μπορεί να αντιμετωπιστεί μέσω του μηχανισμού chunk.
Στην κεφαλίδα που περιέχει το περιεχόμενο του μηνύματος, εάν υπάρχει πεδίο μήκους περιεχομένου, η αντίστοιχη τιμή του πεδίου πρέπει να ταιριάζει ακριβώς με το μήκος του θέματος του μηνύματος.
"Το μήκος οντότητας ενός μηνύματος είναι το μήκος του σώματος του μηνύματος πριν από την εφαρμογή οποιωνδήποτε κωδικοποιήσεων μεταφοράς"
Αυτό είναιΕάν υπάρχει ένα κομμάτι, δεν μπορεί να υπάρχει μήκος περιεχομένου

Ο μόνιμος μηχανισμός σύνδεσης του HTTP/1.0 εισήχθη αργότερα και υλοποιείται μέσω της κεφαλίδας Σύνδεση: keep-alive, η οποία μπορεί να χρησιμοποιηθεί τόσο από τον διακομιστή όσο και από τον πελάτη για να πουν ο ένας στον άλλο ότι δεν χρειάζεται να αποσυνδέσουν τη σύνδεση TCP μετά την αποστολή των δεδομένων για μελλοντική χρήση.Το HTTP/1.1 απαιτεί όλες οι συνδέσεις να είναι μόνιμεςΕκτός αν προσθέσετε ρητά Σύνδεση: κοντά στην κεφαλίδα。 Έτσι, στην πραγματικότητα, το πεδίο κεφαλίδας σύνδεσης στο HTTP/1.1 δεν έχει πλέον την τιμή του keep-alive, αλλά για ιστορικούς λόγους, πολλοί διακομιστές ιστού και προγράμματα περιήγησης εξακολουθούν να διατηρούν τη συνήθεια να στέλνουν το Connection: keep-alive σε μεγάλες συνδέσεις HTTP/1.1.

Στην πραγματικότητα, τα τελευταία μπορούν σχεδόν να αγνοηθούν και μια σύντομη περίληψη έχει ως εξής:


1. Content-Length: Εάν υπάρχει και ισχύει, πρέπει να είναι ακριβώς το ίδιο με το μήκος μετάδοσης του περιεχομένου του μηνύματος. (Δοκιμασμένο για περικοπή εάν είναι πολύ σύντομο και πολύ μεγάλο για να προκαλέσει χρονικό όριο.) )
2. Εάν υπάρχει Μεταφορά-Κωδικοποίηση (η εστίαση είναι κομματιασμένη), δεν μπορεί να υπάρχει Περιεχόμενο-Μήκος στην κεφαλίδα και θα αγνοηθεί.
3. Εάν χρησιμοποιείται σύντομη σύνδεση, η διάρκεια μετάδοσης του μηνύματος μπορεί να προσδιοριστεί απευθείας κλείνοντας τη σύνδεση μέσω του διακομιστή. (Αυτό είναι εύκολο να το καταλάβω)
Σε συνδυασμό με άλλα χαρακτηριστικά του πρωτοκόλλου HTTP, για παράδειγμα, το Http1.1 δεν υποστήριζε το keep alive. Τότε μπορούν να εξαχθούν τα ακόλουθα συμπεράσματα:
1. Στο Http 1.0 και σε παλαιότερες εκδόσεις, το πεδίο μήκους περιεχομένου είναι προαιρετικό.
2. Σε http1.1 και νεότερες εκδόσεις. Εάν παραμείνετε ζωντανοί, τότε το μήκος περιεχομένου και το κομμάτι πρέπει να είναι ένα από τα δύο. Εάν δεν διατηρείται ζωντανό, είναι το ίδιο με το http1.0. μήκος περιεχομένου.





Προηγούμενος:"Node.js: Let's Dozen C++ Extensions" σαρωμένη έκδοση pdf [146MB]
Επόμενος:Content-Length του πρωτοκόλλου Http
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com