Devo specificare un tipo MIME se il file caricato non ha estensione? In altre parole, esiste un tipo MIME generale predefinito?
Devo specificare un tipo MIME se il file caricato non ha estensione? In altre parole, esiste un tipo MIME generale predefinito?
Risposte:
È possibile utilizzare 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.
application/octet-stream
file sia eseguibile. E anche se un browser sta scaricando consapevolmente un file eseguibile, non "probabilmente lo esegue" senza che l'utente lo chieda; il semplice download di un eseguibile non implica che lo desideri eseguito in questo momento. Se esiste davvero un browser in grado di eseguire application/octet-stream
automaticamente i file durante il download, comunicaci quale e come riprodurre il comportamento. In questo momento non ti credo.
Dovremmo usare RFC-7231 (semantica e contenuto HTTP / 1.1) come riferimento anziché RFC-2046 (tipi di media) perché la domanda era chiaramente sul tipo di contenuto HTTP.
Anche RFC-2046 non definisce chiaramente tipi sconosciuti, ma RFC-7231 lo fa.
Non inviare il tipo MIME per dati sconosciuti.
Per essere più chiari: non utilizzare affatto l'intestazione Content-Type.
RFC-7231
Hypertext Transfer Protocol (HTTP / 1.1): Semantica e contenuto
3.1.1.5. Tipo di contenutoUn mittente che genera un messaggio contenente un corpo di payload DOVREBBE
generare un campo di intestazione Content-Type in quel messaggio a meno che il
tipo di supporto previsto della rappresentazione allegata non sia sconosciuto al
mittente.
Quella sezione ti dice chiaramente di lasciarla fuori se non lo conosci per certo. Indica anche che il ricevitore potrebbe presumere che il tipo sia application / octet-stream ma la cosa è che potrebbe anche essere qualcos'altro.
RFC-2046
4.5.1. Sottotipo Octet-StreamL'azione raccomandata per un'implementazione che riceve
un'entità "application / octet-stream" è semplicemente offrire di mettere i dati
in un file, con qualsiasi codifica di trasferimento di contenuto annullata, o forse di
usarli come input per un utente specificato processi.
E, come già detto sopra:
RFC-7231
3.1.1.5. Tipo di contenutoSe non è presente un campo di intestazione Content-Type, il destinatario PUO 'assumere un tipo di media di "application / octet-stream"
([RFC2046], Sezione 4.5.1) o esaminare i dati per determinarne il tipo.
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 la decisione al ricevitore e il ricevitore potrebbe quindi verificare se cammina come anatra e ...
Preferisco application/unknown
, ma il risultato sarà sicuramente lo stesso diapplication/octet-stream
application/octet-stream
o application/unknown
? C'è una ragione per cui hanno inventato image/png
.