Ogólne#
Body#
W tym miejscu umieszczam powtarzające się specyficzne pojęcia i algorytmy w interfejsie Body.
Pojęcia#
Obiekt implementujący interfejs Body jest skojarzony z ciałem # (body) [początkowo pustym strumieniem bajtów], flagą użycia # (used flag) [początkowo nieustawioną] i typem MIME # (MIME type) [początkowo pustą sekwencją bajtów].
Algorytmy#
consume body
Obiekt implementujący interfejs Body jest skojarzony z algorytmem konsumowania ciała # (consume body), który pobiera typ type i wykonuje następujące kroki:
- Niech p będzie nową obietnicą.
- Jeśli flaga użycia jest ustawiona, to odrzuć p z użyciem błędu JavaScript
TypeError
. W przeciwnym razie ustaw flagę użycia i wykonaj poniższe podkroki równolegle:
- Niech stream będzie ciałem.
- Jeśli stream jest wartością
null
, to ustaw stream na pustą sekwencję bajtów. - Niech bytes będą wynikiem odczytu ze stream do chwili (until) zwrócenia końca strumienia.
W oparciu o wartość type:
- ArrayBuffer
Rozwiń p z użyciem
ArrayBuffer
, którego zawartością są bytes.- Blob
Rozwiń p z użyciem
Blob
, którego zawartością są bytes i wartością atrybututype
jest typ MIME.- FormData
Jeśli typem MIME (pomijając parametry) jest `
multipart/form-data
`, to wykonaj poniższe wewnętrzne podkroki:- Parsuj bytes przy użyciu wartości parametru `
boundary
` z typu MIME i kodowania w postaci utf-8 (zgodnie z wymogami standardu RFC 2388 - "Returning Values from Forms: multipart/form-data"). - Jeśli to się nie uda z jakiegoś powodu, to odrzuć p z użyciem błędu JavaScript
TypeError
. - W przeciwnym razie rozwiń p z użyciem nowego obiektu typu
FormData
, uruchamiając tworzenie wejścia dla każdego wejścia jako rezultat operacji parsowania i dołączania go do wejść.
W przeciwnym razie, jeśli typem MIME (pomijając parametry) jest `
application/x-www-form-urlencoded
`, to wykonaj poniższe wewnętrzne podkroki:- Niech entries będzie wynikiem uruchomienia parsera
application/x-www-form-urlencoded
z przekazaniem bytes. - Jeśli entries jest błędem, to odrzuć p z użyciem błędu JavaScript
TypeError
. - Rozwiń p z nowym obiektem typu
FormData
, którego wejściami jest entries.
W przeciwnym razie odrzuć p z użyciem błędu JavaScript
TypeError
.- Parsuj bytes przy użyciu wartości parametru `
- JSON
Niech JSON będzie wynikiem wywołania wewnętrznej wartości właściwości
parse
w obiekcie typuJSON
, z przekazaniem argumentu będącego wynikiem dekodowania w utf-8 na bytes.Jeśli to zrzuci wyjątek, to odrzuć p z użyciem tego wyjątku.
W przeciwnym razie rozwiń p z użyciem JSON.
- text
Rozwiń p z użyciem wyniku dekodowania w utf-8 na bytes.
- Zwróć p.
extract
Aby wydobyć # (extract) strumień bajtów i wartość nagłówka `Content-Type
` z obiektu object należy wykonać następujące kroki:
- Niech stream będzie pustym strumieniem bajtów.
- Niech Content-Type będzie wartością
null
. W zależności od typu object wykonaj następujące podkroki:
Blob
- Wstaw kopię zawartość w object do stream.
- Jeśli właściwość
type
w object nie jest pustą sekwencją bajtów, to ustaw Content-Type na jej wartość.
BufferSource
- Wstaw kopię object do stream.
FormData
- Wstaw do stream wynik uruchomienia algorytmu kodowania
multipart/form-data
z przekazaniem object (jako form data set) i utf-8 (jako wyraźne kodowanie znaków). - Ustaw Content-Type na `
multipart/form-data;boundary=
`, po której następuje tekstowy separatormultipart/form-data
wygenerowany przez algorytm kodowaniamultipart/form-data
.
- Wstaw do stream wynik uruchomienia algorytmu kodowania
URLSearchParams
- Wstaw do stream wynik uruchomienia serializera
application/x-www-form-urlencoded
na liście skojarzonej z object. - Ustaw Content-Type na `
application/x-www-form-urlencoded;charset=UTF-8
`.
- Wstaw do stream wynik uruchomienia serializera
USVString
- Wstaw do stream wynik kodowania w utf-8 na object.
- Ustaw Content-Type na `
text/plain;charset=UTF-8
`.
- Zwróć stream i Content-Type.