web-dev-qa-db-ja.com

HTTPの "Content-Type"ヘッダーに可能なすべての値は何ですか?

HTTPリクエストに渡す前に、Content-Typeヘッダー値を検証する必要があります。

Content-Typeのすべての可能な値についての特定のリストはありますか?

それ以外の場合、HTTPリクエストで使用する前にコンテンツタイプを検証する方法はありますか?

172
Awesome

あなたはここですべてのコンテンツタイプを見つけることができます: http://www.iana.org/assignments/media-types/media-types.xhtml

最も一般的なタイプは以下のとおりです。

  1. タイプ申請

    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.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   
    
103
lebarillier

として定義されているRFC 1341

RFC 822の拡張BNF表記では、Content-Typeヘッダーフィールド値は次のように定義されています。

Content-Type:= type "/"サブタイプ* [";"パラメータ]

タイプ:= "アプリケーション"/"オーディオ"/"画像"/"メッセージ"/"マルチパート"/"テキスト"/"ビデオ"/x-token

x-token:= <2つの文字 "X-"の後ろに空白を入れずに、任意のトークンを続けます>

サブタイプ:=トークン

パラメータ:=属性 "="値

属性:=トークン

値:=トークン/引用符付き文字列

トークン:= 1 *

tspecials:= "("/")"/"<"/">"/"@";/"、"/";にする必要があります。/":"/"\"/<">;引用符付き文字列、/"/"/" ["/"] "/"? "/"。 "; /" = "内で使用する場合、パラメータ値

そして それに続くことができる既知のMIMEタイプのリスト (または、Joeのコメントとしては IANAのソース ))。

ご覧のとおり、リストはそれらすべてに対して検証するには大きすぎます。できることは、一般的な形式とtype属性を検証して、それが正しいこと(オプションのセットが小さいこと)を確認し、それに続くものが正しいと仮定することです(もちろん、実行時に発生する可能性のある例外をキャッチします)。実際の使用には).

上記のコメントにも注意してください。

他の基本型が何らかの理由で使用される場合は、その非標準のステータスを示し、将来の正式名との潜在的な競合を避けるために "X-"で始まる名前を付ける必要があります。

多くの HTTPリクエスト/レスポンス には、自己定義されたある種のX-ヘッダーが含まれていることに気付くでしょう。型を検証するときにはこのことを頭に入れておいてください。

41
Jeroen Vannevel

私は可能性のある "Content-type"値のサブセットをカバーすることを目的とするでしょう、あなたはあなたの質問が既知のコンテンツタイプを識別することに集中しているようです。

@Jeroen RFC 1341の参照は素晴らしいですが、かなり網羅的なリストのためにIANAは公式に登録されたメディアタイプのWebページを保持しています ここ

2
Pete Hornsby

あなたがjaxrsまたは他のものを使用しているならば、リクエストを送る前にmediatype.Userインターセプターと呼ばれるクラスがあるでしょう、そしてこれに対してそれを比較してください。

0
geddamsatish