Вимоги: Щодня, відкриваючи веб-сторінки або додатки, інформація, яку ви переглядаєте, майже завжди отримується через відповіді на HTTP або HTTPS-запити. Використання C# на основі протоколу передачі гіпертексту та нативних сокетів для надсилання HTTP-запитів.
угода
Протокол передачі гіпертексту (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. Як показано нижче:
Connection: close vs keep-alive
Якщо ви використовуєте ReadToEndAsync для зчитування всіх даних з відповіді, потрібно встановити Connection на закриття. Якщо встановити режим збереження, відповідь ReadToEndAsync зависне. Причини не зависати: Багато веб-серверів (таких як Nginx, Apache або певні шлюзи API) активно ініціюють FIN пакет для закриття TCP-з'єднання, якщо клієнт нативний для запису сокета без подальших дій, або якщо сервер активує тайм-аут у режимі очікування (зазвичай встановлений на 5 секунд).
HTTP-конвеєр, що одночасно надсилає кілька запитів:Вхід за гіперпосиланням видно.
Transfer-Encoding: chunked 表示数据是以分块的形式传输的。每个数据块前面都有一个指示该块大小的十六进制数字,这个数字后面跟着一个换行符(CRLF),然后是实际的数据内容,再接着另一个换行符来结束这一块。这种编码方式允许服务器在不知道全部内容长度的情况下开始发送数据。
FDD8 — це таке шістнадцяткове число, яке вказує розмір наступного блоку даних (у байтах). Перетворення fdd8 з шістнадцяткового в десятковий дає 65 016 байтів. Це означає, що одразу після fdd8 і CRLF становить 65 016 байт даних. Після цього може бути більше блоків даних, доки не буде виявлено блок розміру 0, що свідчить про завершення передачі.
FDD8 повідомляє приймачу, що наступний блок даних має довжину 65 016 байт. |