Tipo di file sconosciuto MIME?

Devo specificare un tipo MIME se il file caricato non ha estensione? In altre parole, esiste un tipo MIME generale predefinito?

Puoi usare application/octet-stream per tipi sconosciuti.

RFC 2046 afferma nella sezione 4.5.1:

Il sottotipo “octet-stream” viene utilizzato per indicare che un corpo contiene dati binari arbitrari.

Risorse RFC:

Dovremmo usare RFC-7231 (Semantica e contenuto HTTP / 1.1) come riferimento invece di RFC-2046 (Tipi di media) perché la domanda era chiaramente relativa al tipo di contenuto HTTP.

Anche RFC-2046 non definisce chiaramente i tipi sconosciuti ma lo fa RFC-7231.

Risposta breve:

Non inviare il tipo MIME per dati sconosciuti.
Per essere più chiari: non utilizzare affatto l’intestazione Content-Type.

Riferimenti:

RFC-7231
Hypertext Transfer Protocol (HTTP / 1.1): semantica e contenuto
3.1.1.5. Tipo di contenuto

Un mittente che genera un messaggio contenente un corpo del payload DOVREBBE
generare un campo di intestazione Content-Type in quel messaggio a meno che il
tipo di supporto previsto della rappresentazione inclusa è sconosciuto al
mittente.

Quella sezione ti dice chiaramente di lasciarla fuori se non lo sai per certo. Indica anche che il ricevente potrebbe assumere che type sia application / octet-stream ma la cosa è che potrebbe anche essere qualcos’altro.

Cosa c’è di diverso allora?

RFC-2046
4.5.1. Sottotitolo Octet-Stream

L’azione consigliata per un’implementazione che riceve un
L’entity framework “application / octet-stream” deve semplicemente offrire di mettere i dati
in un file, con qualsiasi Content-Transfer-Encoding annullato, o forse a
usarlo come input per un processo specificato dall’utente.

E, come già detto sopra:

RFC-7231
3.1.1.5. Tipo di contenuto

Se non è presente un campo di intestazione Content-Type, il destinatario può assumere un tipo di media “application / octet-stream”
([RFC2046], Sezione 4.5.1) o esaminare i dati per determinarne il tipo.

Conclusione:

Se lo definisci come “application / octet-stream”, allora stai dicendo che sai che è “application / octet-stream”.

Se non lo definisci, allora stai dicendo che non sai di cosa si tratta e lascia una decisione al ricevente e al ricevente, quindi controlla se cammina come un papero e …

Preferisco l’ application/unknown , ma il risultato sarà sicuramente lo stesso application/octet-stream