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