Αν ένα υποτιθέμενο PDF ή υπολογιστικό φύλλο αρχίζει με HTTP/1.1 200 OK, το πρόγραμμα λήψης αποθήκευσε μια ακατέργαστη απόκριση αντί για το αρχείο. Αυτή η σχηματική απόκριση περιέχει μόνο τέσσερα byte περιεχομένου:

HTTP/1.1 200 OK
Transfer-Encoding: chunked

4
DATA
0

Το αρχείο είναι το DATA. Η γραμμή κατάστασης, οι κεφαλίδες, ο δείκτης μεγέθους και η δομή τερματισμού ανήκουν στο HTTP. Η αφαίρεση σταθερού αριθμού byte δεν είναι ασφαλής επειδή τα μήκη των κεφαλίδων ποικίλλουν. Η αντιγραφή όλων μετά την πρώτη κενή γραμμή αφήνει ακόμη την πλαισίωση τμημάτων, και οι πληροφοριακές αποκρίσεις μπορούν να προηγούνται της τελικής απόκρισης.

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

Η κωδικοποίηση περιεχομένου είναι ένα ακόμη επίπεδο. Αποφασίστε αν χρειάζεστε αποκωδικοποιημένα byte αρχείου ή ρητά ζητούμενο ακατέργαστο περιεχόμενο, με βάση την τεκμηριωμένη συμπεριφορά του πελάτη. Τα συμπιεσμένα byte δεν είναι αυτόματα αλλοίωση του διαμεσολαβητή.

Αν η εφαρμογή πρέπει να διατηρήσει κώδικα σε επίπεδο υποδοχής, κατέχει όλους αυτούς τους κανόνες ανάλυσης καθώς και τον χειρισμό ανάγνωσης και εγγραφής. Γράψτε μόνο τον αριθμό των byte που επιστρέφει πραγματικά μια ανάγνωση, όχι τη χωρητικότητα του buffer, και χειριστείτε τις μερικές εγγραφές. Διαφορετικά, παλιό περιεχόμενο buffer μπορεί να αλλοιώσει ακόμη και ένα σωστά εξαγόμενο σώμα.

Το HTTPS απαιτεί περισσότερα από την αφαίρεση μιας απόκρισης CONNECT: μετά την επιτυχή ρύθμιση της σήραγγας, εγκαταστήστε TLS προορισμού και μετά αναλύστε την εσωτερική απόκριση HTTP. Τα κρυπτογραφημένα byte μετά τις κεφαλίδες του διαμεσολαβητή δεν είναι το αρχείο προς λήψη.

Αφήστε την αποτυχημένη ή ημιτελή έξοδο κάτω από προσωρινό όνομα. Δημοσιεύστε την μόνο αφού πετύχουν η μεταφορά και οι έλεγχοι αρχείου· ένα μη κενό αρχείο δεν αποδεικνύει πλήρη λήψη.

Σχετικά άρθρα