Jakie są wszystkie możliwe wartości nagłówka HTTP „Content-Type”?

270

Muszę sprawdzić Content-Typewartość nagłówka przed przekazaniem go do żądania HTTP.

Czy istnieje konkretna lista wszystkich możliwych wartości Content-Type?

W przeciwnym razie, czy istnieje sposób na sprawdzenie poprawności typu zawartości przed użyciem go w żądaniu HTTP?

Niesamowite
źródło
9
Prawidłowe typy mediów powinny być zarejestrowane w IANA - aktualna lista znajduje się tutaj: iana.org/assignments/media-types/media-types.xhtml, ale pamiętaj, że ta lista może się z czasem aktualizować. Nie ma ustalonej listy dozwolonych.
Joe
@Joe: „Prawidłowe typy nośników powinny być zarejestrowane w IANA” - czekaj, czy to oznacza, że ​​niestandardowe typy nośników (tylko do użycia w internetowym interfejsie API specyficznym dla aplikacji, który będzie wywoływany tylko przez niestandardową aplikację kliencką) to w ogóle niedozwolone?
LUB Mapper
1
@ORMapper przeczytałbym to bardziej jako „istnieje oficjalna lista, ale nie zdziwiłbym się, gdy zobaczyłem wiele innych na wolności”. Jeśli chodzi o pytanie PO, jeśli chciałbyś spróbować zweryfikować „wszystkie typy”, przynajmniej chciałbyś zweryfikować wszystkie zarejestrowane typy. Co zrobić z dodatkowymi, jest bardziej otwarte. O ile mi wiadomo, nie ma wymogu rejestrowania typów niestandardowych.
Joe
Zaakceptuj odpowiedź, która najbardziej pomogła Ci w rozwiązaniu problemu. Pomaga przyszłym czytelnikom. Jeśli odpowiedzi nie były pomocne, zostaw poniżej komentarze. Aby plakat mógł odpowiednio je zaktualizować. Przeczytaj Co powinienem zrobić, gdy ktoś odpowie na moje pytanie? wiedzieć więcej.
Roshana Pitigala

Odpowiedzi:

254

Każdy rodzaj zawartości można znaleźć tutaj: http://www.iana.org/assignments/media-types/media-types.xhtml

Najpopularniejsze typy to:

  1. Wpisz aplikację

    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. Wpisz dźwięk

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. Wpisz obraz

    image/gif   
    image/jpeg   
    image/png   
    image/tiff    
    image/vnd.microsoft.icon    
    image/x-icon   
    image/vnd.djvu   
    image/svg+xml    
    
  4. Wpisz wieloczęściowy

    multipart/mixed    
    multipart/alternative   
    multipart/related (using by MHTML (HTML mail).)  
    multipart/form-data  
    
  5. Wpisz tekst

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. Wpisz wideo

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. Wpisz 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
źródło
50

Zgodnie z definicją w RFC 1341 :

W rozszerzonej notacji BNF RFC 822 wartość pola nagłówka Content-Type jest zdefiniowana w następujący sposób:

Content-Type: = type "/" podtyp * [";" parametr]

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

x-token: = <Dwa znaki „X-”, po których nie występują żadne spacje, żadne znaki>

podtyp: = token

parametr: = wartość atrybutu „=”

atrybut: = token

wartość: = token / quoted-string

token: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; Musi być w / ”,„ / ”;” / ":" / "\" / <">; ciąg cudzysłowu, /" / "/" ["/"] "/"? "/". "; do użycia w / / = =; wartości parametrów

I lista znanych typów MIME, które mogą za nim podążać (lub, jak zauważa Joe, źródło IANA ).

Jak widać, lista jest zbyt duża, aby można ją było zweryfikować w stosunku do wszystkich. Możesz sprawdzić poprawność względem ogólnego formatu i typeatrybutu, aby upewnić się, że jest poprawny (zestaw opcji jest mały) i po prostu założyć, że to, co następuje, jest poprawne (i oczywiście wychwyć wszelkie wyjątki, które możesz napotkać, gdy go umieścisz do faktycznego użycia).

Zwróć także uwagę na powyższy komentarz:

Jeśli z jakiegokolwiek powodu ma być używany inny typ podstawowy, należy nadać mu nazwę rozpoczynającą się od „X-”, aby wskazać jego niestandardowy status i uniknąć potencjalnego konfliktu z przyszłą oficjalną nazwą.

Zauważysz, że wiele żądań / odpowiedzi HTTP zawiera X-pewnego rodzaju nagłówki, które są samodzielnie zdefiniowane, pamiętaj o tym podczas sprawdzania poprawności typów.

Jeroen Vannevel
źródło
RFC 1341 nie dotyczy HTTP.
Julian Reschke
2
RFC 1341 opisuje nagłówki Content-Type, które są używane w HTTP. Jak dokładnie powiedziałbyś, że nie są ze sobą powiązane?
Jeroen Vannevel
2
Został kilkakrotnie przestarzały i zastąpiony nowszymi dokumentami. Istotne jest to, co mają do powiedzenia < greenbytes.de/tech/webdav/… > (plus dokumenty, do których się odwołuje).
Julian Reschke
3

Chciałbym objąć podzbiór możliwych wartości „Typ zawartości”, wydaje się, że pytanie koncentruje się na identyfikacji znanych typów treści.

@Jeroen RFC 1341 referencyjna jest super, ale na liście dość wyczerpujący IANA utrzymuje stronę internetową oficjalnie zarejestrowanych typów nośników tutaj .

Pete Hornsby
źródło
Nie są to „znane” mediatypy (tj. Próbki tego, co zaobserwowano „na wolności”), ale mediatypy, które przeszły przez procedury rejestracji IANA. Są one zatem oficjalnie zarejestrowane. Ważne jest, aby zwrócić na to uwagę :)
DaSourcerer
0

Jeśli używasz Jaxrs lub innego, wtedy przed wysłaniem żądania będzie klasa o nazwie mediatype.User przechwytująca i porównaj ją z tym.

geddamsatish
źródło