Czy muszę określać typ MIME, jeśli przesyłany plik nie ma rozszerzenia? Innymi słowy, czy istnieje domyślny ogólny typ MIME?
Czy muszę określać typ MIME, jeśli przesyłany plik nie ma rozszerzenia? Innymi słowy, czy istnieje domyślny ogólny typ MIME?
Odpowiedzi:
Możesz użyć application/octet-stream
dla nieznanych typów.
RFC 2046 stwierdza w sekcji 4.5.1:
Podtyp „Octet-stream” służy do wskazania, że treść zawiera dowolne dane binarne.
application/octet-stream
plik jest wykonywalny. A nawet jeśli przeglądarka jest świadomie pobierając plik wykonywalny, to nie „ewentualnie wykonać” bez użytkownik pytaniem; Samo pobranie pliku wykonywalnego nie oznacza, że chcę go teraz wykonać. Jeśli naprawdę istnieje przeglądarka, która może application/octet-stream
automatycznie uruchamiać pliki podczas pobierania, powiedz nam, która i jak odtworzyć to zachowanie. Teraz ci nie wierzę.
Powinniśmy użyć RFC-7231 (semantyka i zawartość HTTP / 1.1) jako odniesienia zamiast RFC-2046 (typy mediów), ponieważ pytanie dotyczyło wyraźnie HTTP Content-Type.
Również RFC-2046 nie definiuje jasno nieznanych typów, ale RFC-7231 tak.
Nie wysyłaj typu MIME dla nieznanych danych.
Żeby było jaśniej: w ogóle nie używaj nagłówka Content-Type.
RFC-7231
Hypertext Transfer Protocol (HTTP / 1.1): semantyka i zawartość
3.1.1.5. Typ zawartościNadawca, który generuje wiadomość zawierającą treść ładunku, POWINIEN
wygenerować pole nagłówka Content-Type w tej wiadomości, chyba że
zamierzony typ nośnika załączonej reprezentacji jest nieznany
nadawcy.
Ta sekcja wyraźnie mówi, abyś to pominął, jeśli nie wiesz tego na pewno. Mówi również, że odbiornik może założyć, że typ to application / octet-stream, ale rzecz jest taka, że może to być również coś innego.
RFC-2046
4.5.1. Podtyp strumienia oktetuZalecanym działaniem dla implementacji, która otrzymuje jednostkę
„application / octet-stream”, jest po prostu zaoferowanie umieszczenia danych
w pliku z cofniętym kodowaniem Content-Transfer-Encoding lub może
użycie ich jako danych wejściowych dla określonego przez użytkownika proces.
Jak już wspomniano powyżej:
RFC-7231
3.1.1.5. Typ zawartościJeśli pole nagłówka Content-Type nie jest obecne, odbiorca MOŻE albo przyjąć typ mediów „application / octet-stream”
([RFC2046], Rozdział 4.5.1), albo sprawdzić dane w celu określenia ich typu.
Jeśli zdefiniujesz go jako „application / octet-stream”, to mówisz, że wiesz, że jest to „application / octet-stream”.
Jeśli tego nie zdefiniujesz, mówisz, że nie wiesz, co to jest i pozostawiasz decyzję odbiorcy, a odbiorca może sprawdzić, czy chodzi jak kaczka i ...
Wolę application/unknown
, ale wynik na pewno będzie taki sam jakapplication/octet-stream
application/octet-stream
lub application/unknown
? Jest powód, dla którego wymyślili image/png
.