απαιτήσεις: Κάθε μέρα, όταν ανοίγετε ιστοσελίδες ή εφαρμογές, οι πληροφορίες που περιηγείστε είναι σχεδόν πάντα προσβάσιμες στέλνοντας απαντήσεις αιτημάτων HTTP ή HTTPS. Χρήση C# με βάση το πρωτόκολλο μεταφοράς υπερκειμένου και εγγενείς υποδοχές για την αποστολή αιτημάτων HTTP.
συμφωνία
Το Hypertext Transfer Protocol (HTTP) είναι ένα πρωτόκολλο επιπέδου εφαρμογής χωρίς κατάσταση που χρησιμοποιείται για κατανεμημένα, συνεργατικά συστήματα πληροφοριών υπερκειμένου.
Πρωτόκολλο HTTP / 1.1 (RFC 9112):Η σύνδεση με υπερσύνδεσμο είναι ορατή. Σημασιολογία HTTP (RFC 9110):Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Παράδειγμα αιτήματος:
Δείγμα απάντησης:
HTTP/1.1 200 ΟΚ
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
Γεια σου Κόσμε! Το περιεχόμενό μου περιλαμβάνει ένα τελικό CRLF.
Το Socket στέλνει αιτήματα
Ο πηγαίος κώδικας έχει ως εξής:
Ο πηγαίος κώδικας υποστηρίζει την αποστολή αιτημάτων σε πρωτόκολλα HTTP και HTTPS. Οπως φαίνεται παρακάτω:
Σύνδεση:κλείσιμο vs διατήρηση εν ενεργεία
Εάν χρησιμοποιείτε το ReadToEndAsync για να διαβάσετε όλα τα δεδομένα από την απόκριση, πρέπει να ρυθμίσετε τη σύνδεση να κλείνει. Εάν το ρυθμίσετε σε keep-alive, η απόκριση ReadToEndAsync θα παγώσει. Λόγοι για τη μη κατάψυξη: Πολλοί διακομιστές ιστού (όπως Nginx, Apache ή ορισμένες πύλες API) θα ξεκινήσουν ενεργά ένα πακέτο FIN για να κλείσουν τη σύνδεση TCP εάν ο πελάτης είναι εγγενής για να γράψει μια υποδοχή χωρίς επακόλουθη ενέργεια ή εάν ο διακομιστής ενεργοποιήσει ένα χρονικό όριο αδράνειας (συνήθως ορίζεται στα 5 δευτερόλεπτα).
Αγωγός HTTP, αποστολή πολλαπλών αιτημάτων ταυτόχρονα:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Transfer-Encoding: chunked 表示数据是以分块的形式传输的。每个数据块前面都有一个指示该块大小的十六进制数字,这个数字后面跟着一个换行符(CRLF),然后是实际的数据内容,再接着另一个换行符来结束这一块。这种编码方式允许服务器在不知道全部内容长度的情况下开始发送数据。
Το FDD8 είναι ένας τέτοιος δεκαεξαδικός αριθμός που καθορίζει το μέγεθος του ακόλουθου μπλοκ δεδομένων (σε byte). Η μετατροπή του fdd8 από δεκαεξαδικό σε δεκαδικό έχει ως αποτέλεσμα 65.016 byte. Αυτό σημαίνει ότι αμέσως μετά το fdd8 και το CRLF είναι 65.016 byte δεδομένων. Μετά από αυτό, ενδέχεται να υπάρχουν περισσότερα μπλοκ δεδομένων μέχρι να εμφανιστεί ένα μπλοκ μεγέθους 0, υποδεικνύοντας ότι η μετάδοση έχει ολοκληρωθεί.
Το FDD8 λέει στον δέκτη ότι το επόμενο μπλοκ δεδομένων έχει μήκος 65,016 byte. |