Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 1|Отговор: 0

[Източник] .NET/C# използва Socket за изпращане на HTTP(s) заявки, базирани на Hypertext Transfer Protocol

[Копирай линк]
Публикувано вПреди 44 секунди | | | |
Изисквания: Всеки ден, когато отваряте уеб страници или приложения, информацията, която разглеждате, почти винаги се достъпва чрез изпращане на HTTP или HTTPS заявки. Използване на C# базиран на Hypertext Transfer Protocol и native sockets за изпращане на 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 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 байта.




Предишен:HTTP(и) Резюме на тестовия сайт (непрекъснато обновявано)
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com