Fetch | Заголовок «Content-Type»

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

 

Заголовок `Content-Type` в значительной степени определен в HTTP. Его модель обработки определяется здесь, поскольку ABNF, определенный в HTTP, несовместим с веб-контентом. [HTTP]

Чтобы извлечь тип MIME (extract a MIME type) из списка заголовков headers, выполните следующие действия:

1. Пусть кодировка charset будет null.
2. Пусть сущность essence будет null.
3. Пусть mimeType будет null.
4. Пусть значения values будут результатом получения, декодирования и разделения `Content-Type` из заголовков headers.
5. Если значение values равно null, вернуть ошибку.
6. Для каждого value из values:
   6.1 Пусть temporaryMimeType будет результатом синтаксического анализа значения value.
   6.2 Если temporaryMimeType является ошибкой или его сущность "*/*", продолжайте.
   6.3 Задайте для mimeType значение temporaryMimeType.
   6.4 Если сущность mimeType не является сущностью essence, тогда:
      6.4.1 Установите charset значение null.
      6.4.2 Если параметры mimeType ["charset"] существуют, установите для charset значение mimeType параметры ["charset"].
      6.4.3 Установите essence на сущность mimeTypes.
   6.5 В противном случае, если параметры mimeType ["charset"] не существуют, а charset не равен null, установите для параметров mimeType ["charset"] значение charset.
7. Если mimeType имеет значение null, вернуть ошибку.
8. Вернуть mimeType

 

ПРЕДУПРЕЖДЕНИЕ!

Когда извлечение типа MIME возвращает ошибку или тип MIME, сущность которого неверна для данного формата, рассматривайте это как фатальную ошибку. Существующие функции веб-платформы не всегда следовали этой схеме, которая на протяжении многих лет была основным источником уязвимостей в этих функциях. Напротив, параметры типа MIME обычно можно игнорировать.

 

Пример

Вот как на практике извлечь функции типа MIME:

Заголовки (как в сети) Вывод (сериализованный)
Content-Type: text/plain;charset=gbk, text/html text/html
Content-Type: text/html;charset=gbk;a=b, text/html;x=y text/html;x=y;charset=gbk
Content-Type: text/html;charset=gbk;a=b
Content-Type: text/html;x=y
text/html;x=y;charset=gbk
Content-Type: text/html;charset=gbk
Content-Type: x/x
Content-Type: text/html;x=y
text/html;x=y
Content-Type: text/html
Content-Type: cannot-parse
text/html
Content-Type: text/html
Content-Type: */*
text/html
Content-Type: text/html
Content-Type:
text/html

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

Стандарт Fetchhttps://fetch.spec.whatwg.org/#content-type-header

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

 

Поделись записью