Які всі можливі значення для заголовка 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 Я б прочитав це більше, оскільки "є офіційний список, але я не здивуюсь, побачивши в дикій природі багато інших". Що стосується питання ОП, якщо ви збираєтеся спробувати і затвердити "всі типи", ви хоч би хотіли підтвердити всі зареєстровані типи. Що робити з додатковими - більш відкритим. Наскільки мені відомо, немає необхідності реєструвати власні типи.
Джо

Прийміть відповідь, яка вам найбільше допомогла у вирішенні вашої проблеми. Це допомагає майбутнім читачам. Якщо відповіді не були корисними, залишайте коментарі під ними. Тож афіша може їх оновити відповідно. Прочитайте Що робити, коли хтось відповість на моє запитання? знати більше.
Рошана Пітігала

Відповіді:


254

Ви можете знайти всі типи вмісту тут: 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/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   
    

50

Як визначено в RFC 1341 :

У розширеному позначенні BNF RFC 822 значення поля заголовка Content-Type визначається наступним чином:

Тип вмісту: = тип "/" підтип * [";" параметр]

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

x-token: = <Два символи "X-" слідували, не маючи пробілу, жодним знаком>

підтип: = маркер

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

атрибут: = маркер

значення: = маркер / котирування-рядок

маркер: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; Повинно бути в / "," / ";" / ":" / "\" / <">; quote-string, /" / "/" ["/"] "/"? "/". "; використовувати в межах /" = "; значення параметрів

І список відомих типів MIME, які можуть слідувати за ним (або, як зауважує Джо, джерело IANA ).

Як ви бачите, список занадто великий для вас, щоб підтвердити його. Що ви можете зробити, це підтвердити загальний формат та typeатрибут, щоб переконатися, що це правильно (набір параметрів невеликий), і просто припустити, що те, що випливає, є правильним (і, звичайно, вловлювати будь-які винятки, з якими ви можете зіткнутися, коли ви поставите його до фактичного використання).

Також зверніть увагу на коментар вище:

Якщо з будь-якої причини потрібно використовувати інший основний тип, йому слід надати ім’я, починаючи з "X-", щоб вказати на його нестандартний статус та уникнути потенційного конфлікту з майбутнім офіційним іменем.

Ви помітите, що багато HTTP запитів / відповідей містять певний X-заголовок, який визначається самостійно, майте це на увазі під час перевірки типів.


RFC 1341 не стосується HTTP.
Джуліян Решке

2
RFC 1341 описує заголовки типу вмісту, які використовуються в HTTP. Як саме ви сказали б, що вони не пов'язані між собою?
Єроен Ванневель

2
Він був застарілий і замінений на нові документи неодноразово. Важливо те, що потрібно сказати < greenbytes.de/tech/webdav/… > (плюс посилаються документи).
Джуліян Решке

3

Я маю на меті охопити підмножину можливих значень типу "Вміст", ви, мабуть, зосереджуєтесь на визначенні відомих типів вмісту.

@Jeroen RFC тисячі триста сорок одна посилання велика, але для досить вичерпного переліку IANA зберігає веб - сторінку офіційно зареєстровані типів носіїв тут .


Це не "відомі" медіатипи (тобто зразки того, що спостерігали "в дикій природі"), але медіатипи, які пройшли процедуру реєстрації IANA. Тому вони офіційно зареєстровані.
Мені

0

Якщо ви використовуєте jaxrs або будь-який інший, перед тим, як надсилати запит, буде клас, який називається mediatype.User interceptor і порівняйте його з цим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.