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ą atrybututypejest 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-urlencodedz 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
parsew 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ść
typew 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-dataz 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-datawygenerowany przez algorytm kodowaniamultipart/form-data.
- Wstaw do stream wynik uruchomienia algorytmu kodowania
URLSearchParams- Wstaw do stream wynik uruchomienia serializera
application/x-www-form-urlencodedna 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.