Каковы все возможные значения для заголовка HTTP «Content-Type»?

270

Я должен проверить Content-Typeзначение заголовка, прежде чем передать его в запрос HTTP.

Есть ли конкретный список для всех возможных значений Content-Type?

Иначе, есть ли способ проверить тип контента перед использованием его в HTTP-запросе?

Потрясающие
источник
9
Допустимые типы носителей должны быть зарегистрированы в IANA - текущий список можно посмотреть здесь: iana.org/assignments/media-types/media-types.xhtml, но обратите внимание, что этот список может со временем обновляться. Не существует фиксированного списка разрешенных.
Джо
@Joe: «Допустимые типы мультимедиа должны быть зарегистрированы в IANA» - подождите, это означает, что пользовательские типы мультимедиа (только для использования в веб-API для конкретного приложения, который будет вызываться только клиентским приложением) вообще не разрешено?
ИЛИ Mapper
1
@ORMapper Я бы прочитал это больше как «есть официальный список, но я не удивлюсь, увидев много других в дикой природе». С точки зрения вопроса ОП, если вы собираетесь попытаться проверить «все типы», вы по крайней мере захотите проверить все зарегистрированные типы. Что делать с дополнительными, более открыто. Насколько я знаю, нет необходимости регистрировать пользовательские типы.
Джо
Пожалуйста, примите ответ, который больше всего помог вам в решении вашей проблемы. Это помогает будущим читателям. Если ответы не помогли, оставьте комментарии под ними. Таким образом, плакат может обновить их соответственно. Читать Что мне делать, когда кто-то отвечает на мой вопрос? знать больше.
Рошана Питигала

Ответы:

256

Вы можете найти каждый тип контента здесь: http://www.iana.org/assignments/media-types/media-types.xhtml

Наиболее распространенный тип:

  1. Тип приложения

    application/java-archive
    application/EDI-X12   
    application/EDIFACT   
    application/javascript   
    application/octet-stream   
    application/ogg   
    application/pdf  
    application/xhtml+xml   
    application/x-shockwave-flash    
    application/json  
    application/ld+json  
    application/xml   
    application/zip  
    application/x-www-form-urlencoded  
    
  2. Введите аудио

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. Введите изображение

    image/gif   
    image/jpeg   
    image/png   
    image/tiff    
    image/vnd.microsoft.icon    
    image/x-icon   
    image/vnd.djvu   
    image/svg+xml    
    
  4. Тип multipart

    multipart/mixed    
    multipart/alternative   
    multipart/related (using by MHTML (HTML mail).)  
    multipart/form-data  
    
  5. Введите текст

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. Введите видео

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. Тип VND:

    application/vnd.android.package-archive
    application/vnd.oasis.opendocument.text    
    application/vnd.oasis.opendocument.spreadsheet  
    application/vnd.oasis.opendocument.presentation   
    application/vnd.oasis.opendocument.graphics   
    application/vnd.ms-excel    
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet   
    application/vnd.ms-powerpoint    
    application/vnd.openxmlformats-officedocument.presentationml.presentation    
    application/msword   
    application/vnd.openxmlformats-officedocument.wordprocessingml.document   
    application/vnd.mozilla.xul+xml   
    
lebarillier
источник
51

Как определено в RFC 1341 :

В расширенной нотации BNF RFC 822 значение поля заголовка Content-Type определяется следующим образом:

Content-Type: = type "/" subtype * [";" параметр]

type: = "application" / "audio" / "image" / "message" / "multipart" / "text" / "video" / x-token

x-token: = <За двумя символами «X-», без промежуточных пробелов, следует ни один токен>

подтип: = токен

параметр: = атрибут "=" значение

атрибут: = токен

значение: = токен / строка в кавычках

токен: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; Должен быть в / "," / ";" / ":" / "\" / <">; строка в кавычках, /" / "/" ["/"] "/"? "/". "; использовать в /" = "; значения параметров

И список известных типов MIME, которые могут следовать за ним (или, как замечает Джо, источник IANA ).

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

Также обратите внимание на комментарий выше:

Если по какой-либо причине должен использоваться другой первичный тип, ему нужно дать имя, начинающееся с «X-», чтобы указать его нестандартный статус и избежать возможного конфликта с будущим официальным именем.

Вы заметите, что во многих HTTP-запросах / ответах есть какой-то X-заголовок, который определяется самостоятельно, помните об этом при проверке типов.

Йерун Ванневел
источник
RFC 1341 не имеет отношения к HTTP.
Джулиан Решке
2
RFC 1341 описывает заголовки Content-Type, которые используются в HTTP. Как именно вы скажете, что они не связаны?
Джероен Ванневел
2
Он несколько раз устаревал и заменялся новыми документами. Важным является то, что должен сказать < greenbytes.de/tech/webdav/… > (плюс ссылочные документы).
Джулиан Решке
3

Я хотел бы охватить подмножество возможных значений типа контента, ваш вопрос, кажется, сосредоточен на выявлении известных типов контента.

@Jeroen RFC 1341 ссылки велика, но для довольно исчерпывающего списка IANA сохраняет веб - страницу официально зарегистрированные типов носителей здесь .

Пит Хорнсби
источник
Это не «известные» медиатипы (то есть образцы того, что наблюдалось «в дикой природе»), а медиатипы, прошедшие процедуру регистрации IANA. Поэтому они официально зарегистрированы.
Было
0

Если вы используете jaxrs или любой другой, то перед отправкой запроса будет класс перехватчик mediatype.User, который будет сравниваться с этим.

geddamsatish
источник