Версия документа от 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 |
Информационные ссылки
Стандарт Fetch — https://fetch.spec.whatwg.org/#content-type-header
Перевод стандарта Fetch — https://efim360.ru/fetch/