Apa saja nilai yang mungkin untuk tajuk "Jenis Konten" HTTP?

270

Saya harus memvalidasi nilai Content-Typeheader sebelum meneruskannya ke permintaan HTTP.

Apakah ada daftar khusus untuk semua nilai yang mungkin dari Content-Type?

Jika tidak, apakah ada cara untuk memvalidasi jenis konten sebelum menggunakannya dalam permintaan HTTP?

Luar biasa
sumber
9
Jenis media yang valid seharusnya terdaftar di IANA - Anda dapat melihat daftar saat ini di sini: iana.org/assignments/media-types/media-types.xhtml tetapi perhatikan bahwa daftar ini dapat diperbarui dari waktu ke waktu. Tidak ada daftar tetap yang diizinkan.
Joe
@ Jo: "Jenis media yang valid seharusnya didaftarkan pada IANA" - tunggu, apakah ini berarti jenis media khusus (hanya untuk digunakan dalam API web khusus aplikasi yang hanya akan dipanggil oleh aplikasi klien khusus) adalah sama sekali tidak diizinkan?
ATAU Mapper
1
@ORMapper saya akan membacanya lebih sebagai "ada daftar resmi, tetapi saya tidak akan terkejut melihat banyak orang lain di alam liar". Dalam hal pertanyaan OP, jika Anda akan mencoba dan memvalidasi "semua jenis" Anda setidaknya ingin memvalidasi semua jenis terdaftar. Apa yang harus dilakukan dengan yang tambahan lebih terbuka. Sejauh yang saya tahu tidak ada persyaratan untuk mendaftarkan jenis kustom.
Joe
Harap terima jawaban yang paling membantu Anda dalam memecahkan masalah Anda. Ini membantu pembaca masa depan. Jika jawabannya tidak membantu, tinggalkan komentar di bawahnya. Sehingga poster dapat memperbaruinya sesuai. Baca Apa yang harus saya lakukan ketika seseorang menjawab pertanyaan saya? untuk mengetahui lebih lanjut.
Roshana Pitigala

Jawaban:

256

Anda dapat menemukan setiap jenis konten di sini: http://www.iana.org/assignments/media-types/media-types.xhtml

Jenis yang paling umum adalah:

  1. Ketik aplikasi

    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. Ketikkan audio

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. Ketik gambar

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

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

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. Ketik video

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. Ketik 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
sumber
51

Sebagaimana didefinisikan dalam RFC 1341 :

Dalam notasi BNF Diperpanjang dari RFC 822, nilai bidang header Tipe Konten didefinisikan sebagai berikut:

Tipe-Konten: = tipe "/" subtipe * [";" parameter]

ketik: = "aplikasi" / "audio" / "gambar" / "pesan" / "multipart" / "teks" / "video" / x-token

x-token: = <Dua karakter "X-" diikuti, tanpa spasi putih, dengan token apa pun>

subtipe: = token

parameter: = atribut "=" nilai

atribut: = token

nilai: = token / quotes-string

token: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; Harus dalam / "," / ";" / ":" / "\" / <">; Dikutip-string, /" / "/" ["/"] "/"? "/". "; untuk digunakan dalam /" = "; nilai parameter

Dan daftar tipe MIME yang dikenal yang dapat mengikutinya (atau, seperti yang dikatakan Joe, sumber IANA ).

Seperti yang Anda lihat daftar itu terlalu besar bagi Anda untuk memvalidasi terhadap mereka semua. Apa yang dapat Anda lakukan adalah memvalidasi terhadap format umum dan typeatribut untuk memastikan itu benar (sekumpulan opsi kecil) dan anggap saja apa yang mengikutinya benar (dan tentu saja menangkap setiap pengecualian yang mungkin Anda temui ketika Anda meletakkannya). untuk penggunaan aktual).

Perhatikan juga komentar di atas:

Jika jenis utama lain digunakan untuk alasan apa pun, itu harus diberi nama yang dimulai dengan "X-" untuk menunjukkan statusnya yang tidak standar dan untuk menghindari kemungkinan konflik dengan nama resmi di masa depan.

Anda akan melihat bahwa banyak permintaan / tanggapan HTTP menyertakan X-tajuk jenis yang ditentukan sendiri, ingatlah ini ketika memvalidasi jenisnya.

Jeroen Vannevel
sumber
RFC 1341 tidak relevan dengan HTTP.
Julian Reschke
2
RFC 1341 menjelaskan header Tipe-Konten yang digunakan dalam HTTP. Bagaimana tepatnya Anda mengatakan mereka tidak berhubungan?
Jeroen Vannevel
2
Sudah usang dan diganti dengan dokumen baru beberapa kali. Yang relevan adalah apa yang dikatakan < greenbytes.de/tech/webdav/… > (ditambah dokumen yang dirujuk).
Julian Reschke
3

Saya bermaksud membahas subset dari kemungkinan nilai "tipe konten", pertanyaan Anda tampaknya berfokus pada pengidentifikasian jenis konten yang dikenal.

Referensi @Jeroen RFC 1341 sangat bagus, tetapi untuk daftar yang cukup lengkap, IANA menyimpan laman web jenis media resmi yang terdaftar di sini .

Pete Hornsby
sumber
Itu bukan "tipe yang diketahui" (contoh dari apa yang telah diamati "di alam liar") tetapi tipe-tipe yang melalui prosedur pendaftaran IANA. Karena itu mereka terdaftar secara resmi.
Merasa
0

Jika Anda menggunakan jaxrs atau yang lain, maka akan ada kelas yang disebut mediatype. Pengguna interceptor sebelum mengirim permintaan dan membandingkannya dengan ini.

geddamsatish
sumber