Fetch | Тела

Fetch | Тела

Версия документа от 07 ноября 2021 года. Может измениться в будущем.

 

Тело (body) состоит из:

  • Поток (stream) (null или объект ReadableStream).
  • Источник (source) (значение null, последовательность байтов, объект Blob или объект FormData) изначально имеет значение null.
  • Длина (length) (null или целое число), изначально равная null.
  • УДАЛЕНО ИЗ СТАНДАРТА!!! Переданные байты (transmitted bytes) (целое число), изначально 0.
  • УДАЛЕНО ИЗ СТАНДАРТА!!! Общее число байтов (total bytes) (целое число), изначально 0.

 

Чтобы Клонировать (clone) тело «body«, выполните следующие действия:

1. Пусть "out1, out2" будет результатом течения потока "body".
2. Установите поток body в out1.
3. Вернуть тело, поток которого является out2, а другие члены скопированы из body.

 

УДАЛЕНО ИЗ СТАНДАРТА!!! Чтобы обработать кодирование содержимого с заданными кодировками «codings» и байтами «bytes«, выполните следующие действия:

  1. Если кодировки «codings» не поддерживаются, вернуть байты «bytes«.
  2. Возвращает результат декодирования байтов «bytes» с кодировками, как описано в HTTP, если декодирование не приводит к ошибке, а в противном случае к сбою. [HTTP] [HTTP-SEMANTICS]

 

Для постепенного чтения (incrementally read) тела тела с учетом алгоритма processBodyChunk, алгоритма processEndOfBody, алгоритма processBodyError и необязательного значения null, параллельной очереди или глобального объекта taskDestination (значение по умолчанию null) выполните эти шаги. processBodyChunk должен быть алгоритмом, принимающим последовательность байтов. processEndOfBody должен быть алгоритмом, не принимающим аргументов. processBodyError должен быть алгоритмом, принимающим исключение.

1. Если taskDestination имеет значение null, задайте для taskDestination результат запуска новой параллельной очереди.
2. Пусть reader будет результатом получения читателя для потока тела body.
Примечание

Эта операция не вызовет исключения.

3. Выполните цикл с инкрементным чтением для данных reader, taskDestination, processBodyChunk, processEndOfBody и processBodyError.

 

Чтобы выполнить Цикл с инкрементальным чтением (incrementally-read loop), учитывая ReadableStreamDefaultReader объекта reader, параллельную очередь или глобальный объект taskDestination, алгоритм processBodyChunk, алгоритм processEndOfBody и алгоритм processBodyError:

1. Пусть readRequest будет следующим запросом на чтение:


шаги кусочка (chunk steps), учитывая chunk:

   1. Пусть continueAlgorithm будет null.
   2. Если chunk не является объектом Uint8Array, установите continueAlgorithm на этот шаг: запустите processBodyError с учетом TypeError.
   3. Иначе:

      1. Пусть байты bytes будут копией кусочка - chunk.

 

Примечание

Реализациям настоятельно рекомендуется использовать стратегию реализации, которая по возможности избегает этой копии.

      2. Задайте для алгоритма продолжения следующие шаги: 
         1. Запустить processBodyChunk с заданными байтами bytes. 
         2. Выполните цикл с инкрементным чтением для данных reader, taskDestination, processBodyChunk, processEndOfBody и processBodyError. 
   4. Поставьте задачу выборки в очередь с учетом continueAlgorithm и taskDestination. 


близкие шаги (close steps)
   1. Поставить в очередь задачу выборки с учетом processEndOfBody и taskDestination. 


шаги ошибки (error steps), учитывая e

   1. Поставить задачу выборки в очередь для запуска processBodyError с заданным e с помощью taskDestination. 
2. Прочитать кусочек от читателя reader, заданного readRequest.

 

Чтобы полностью прочитать (fully read) тело body с учетом алгоритма processBody, алгоритма processBodyError и необязательного значения null, параллельной очереди или глобального объекта taskDestination (значение по умолчанию null), выполните следующие действия. processBody должен быть алгоритмом, принимающим последовательность байтов. processBodyError должен быть алгоритмом, не принимающим аргументов.

1. Если taskDestination имеет значение null, задайте для taskDestination результат запуска новой параллельной очереди.
2. Пусть promise будет результатом полного чтения тела как обещания, данного body.
3. Пусть finishedSteps с байтовой последовательностью bytes ставит в очередь задачу выборки для запуска processBody с заданными bytes с taskDestination.
4. Пусть rejectedSteps помещает задачу выборки в очередь для запуска processBodyError с taskDestination.
5. Реагируйте на обещание promise с помощью выполненных шагов fulfilledSteps и отклоненных шагов rejectedSteps.

 

Чтобы полностью прочитать тело как обещание (fully read body as promise) для данного тела body, выполните следующие действия:

1. Пусть reader будет результатом получения читателя для потока тела body. Если это вызвало исключение, вернуть обещание, отклоненное с этим исключением.
2. Вернуть результат чтения всех байтов от читателя reader.

 

Чтобы обработать кодирование содержимого (handle content codings) с учетом codings и bytes, выполните следующие действия:

1. Если codings не поддерживаются, вернуть bytes.
2. Возвращает результат декодирования байтов bytes с кодировками codings, как описано в HTTP, если декодирование не приводит к ошибке, и неудачу в противном случае. [HTTP] [HTTP-SEMANTICS]

 

Информационные ссылки

Стандарт Fetchhttps://fetch.spec.whatwg.org/#bodies

Перевод стандарта Fetch — https://efim360.ru/fetch/