Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 1|Відповідь: 0

[Джерело] .NET/C# використовує Socket для надсилання HTTP(s) запитів на основі протоколу передачі гіпертексту

[Копіювати посилання]
Опубліковано44 секунди тому | | | |
Вимоги: Щодня, відкриваючи веб-сторінки або додатки, інформація, яку ви переглядаєте, майже завжди отримується через відповіді на HTTP або HTTPS-запити. Використання C# на основі протоколу передачі гіпертексту та нативних сокетів для надсилання HTTP-запитів.

угода

Протокол передачі гіпертексту (HTTP) — це протокол безстанного рівня застосування, який використовується для розподілених, колаборативних гіпертекстових інформаційних систем.

Протокол HTTP / 1.1 (RFC 9112):Вхід за гіперпосиланням видно.
HTTP Семантика (RFC 9110):Вхід за гіперпосиланням видно.

Приклад запиту:
ОТРИМАТИ /hello.txt HTTP/1.1
User-Agent: curl/7.64.1
Host: Вхід за гіперпосиланням видно.
Accept-Language: en, mi

Приклад відповіді:
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 байт.




Попередній:Огляд тестового майданчика HTTP(а) (постійно оновлюється)
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com