Как "за кулисами" реализуется интернет-поток?

98
03 марта 2022, 01:50

Ковыряя ASP.NET проект я задумался, а как за кулисами реализуются интернет-потоки.

Скажем, контроллеры имеют метод в который можно передать поток байт и вызывающая сторона начнет их скачивать.

Браузер многократно посылается запрос на одну и ту же ссылку, запрашивая определенный Rangeчерез заголовок?

Язык меня особо не интересует, так как реализация там скорее всего будет +- идентичная.

Рещюмируя, вопросы по части взаимодействия вот такие:

  1. Когда браузер получает ответ от веб-сервера, то Content еще динамически докачивается?
  2. Существует ли Content как таковой или это абстракция и при обращении к нему браузер отправляет на каждую порцию запрос "Дай мне N байт".

P.S Я исходники .NET CORE стянул, что бы посмотреть реализацию, но пока руки не дошли. Быть может кто-то уже разбирал это и может на пальцах рассказать...

Answer 1

"За кулисами", если я правильно понял вопрос, это реализуется через Transfer-Encoding: chunked:

Chunked transfer encoding — механизм передачи данных в протоколе передачи гипертекста (HTTP), позволяющий надёжно доставлять данные от сервера клиенту (чаще всего клиентскому web-браузеру) без необходимости заранее знать точный размер всего тела HTTP-сообщения. Это достигается разбиением сообщения на небольшие части (chunks), а затем передачей каждой части с указанием только её размера (в шестнадцатеричном виде). Окончание передачи сообщения определяется наличием последней части с нулевой длиной. Такой механизм позволяет передать динамически сформированные объекты, для которых нельзя заранее определить размер. Он стал доступен только начиная с HTTP версии 1.1 (HTTP/1.1).

Без механизма сhunked transfer encoding с каждым HTTP-пакетом необходимо указывать заголовок Content-Length, чтобы клиент мог найти конец передаваемого сообщения.

READ ALSO
Как создать ассоциативный массив в C#?

Как создать ассоциативный массив в C#?

Как можно создать ассоциативный массив в c#? В других языках например как js и php это делается легко, но в С# так не работает

97
AngleSharp Как подключить прокси?

AngleSharp Как подключить прокси?

Похожий вопрос уже был но там немного другой код, а я немного разобрался в своем коде и боюсь его сломать

100
Не записывается значение в ячейку GridView

Не записывается значение в ячейку GridView

Данный код, в случае его выполнения, должен прописывать в определённую ячейку текст "Выявлены ошибки"При пошаговом выполнении вижу, что программа...

99