Zasadniczo dzieje się tak, ponieważ witryna nakazuje przeglądarce to zrobić. Czasami dzieje się tak, ponieważ twórca witryny decyduje się na to zachowanie, np. Często spotykane w witrynach do udostępniania plików. Innym razem dzieje się tak, ponieważ jest to domyślna opcja dla dowolnego oprogramowania, którego używają (np. Forum lub oprogramowanie do blogowania). Czasami dzieje się tak, ponieważ twórca serwisu nie ma pojęcia, co robią.
Content-Disposition
Dzieje się tak zwykle dlatego, że witryna wysyła Content-Disposition
nagłówek w odpowiedzi. W szczególności, może wysłać albo inline
albo attachment
.
inline
jest ustawieniem domyślnym, jeśli nie określono inaczej, i oznacza, że przeglądarka otworzy plik w oknie przeglądarki, jeśli jest w stanie.
attachment
oznacza zawsze pobieranie pliku, nigdy nie próbuj otwierać go w przeglądarce.
Jeśli otworzysz narzędzia programistyczne przeglądarki, zobaczysz, że dany link wysyła następujące nagłówki odpowiedzi:
Content-Disposition: attachment; filename="Schubert-Sonata-21-B-flat.pdf"
Content-Type: application/pdf
Informuje to przeglądarkę, aby zawsze pobierała ( attachment
) plik i nadawała mu domyślną nazwę pliku, Schubert-Sonata-21-B-flat.pdf
zamiast wnioskować na podstawie adresu URL. Dodatkowo informuje przeglądarkę (poprawnie), że jest to application/pdf
plik - ale ponieważ jest to attachment
przeglądarka, nadal domyślnie pobiera.
Szczegółowe informacje dotyczące obsługi
Gdy a Content-Disposition
jest wbudowany (lub nieokreślony), przeglądarka spróbuje otworzyć plik w domyślnej przeglądarce osadzonej. Działa to tylko wtedy, gdy przeglądarka wie, jaki to typ pliku, a przeglądarka wie, jak otworzyć ten typ.
Wykrywanie typu
Typ pliku może być określony przez serwer za pomocą Content-Type
nagłówka. Na przykład, najczęstsze typy wbudowane są text/html
, application/javascript
i text/css
, składających się na trzy główne części nowoczesnej strony internetowej. Możesz także mieć więcej typów ezoterycznych application/pdf
.
Inną możliwością jest serwer określił Content-Type
z application/octet-stream
. Jest to najbardziej ogólny typ, który informuje przeglądarkę, że plik to tylko dowolne dane - w tym momencie jedyną rzeczą, jaką może zrobić przeglądarka, jest jego pobranie (teoretycznie - przejdziemy do tego).
Jeśli a Content-Type
nie jest określone przez serwer (a czasem nawet gdy tak jest), przeglądarka może wykonać tak zwane wąchanie, aby spróbować odgadnąć typ, czytając plik i szukając wzorców.
Obsługa typów
Po otrzymaniu pliku o inline
nieokreślonej dyspozycji przeglądarka musi spróbować otworzyć go w przeglądarce, jeśli to możliwe. Aby to zrobić, sprawdza typ pliku, a jeśli rozpozna typ, spróbuje go otworzyć. Większość przeglądarek otworzy dowolny text/
typ w prostej przeglądarce tekstu, spróbuje renderować text/html
jako stronę internetową, może otworzyć się application/json
w specjalnej przeglądarce wyróżnionej składnią itp.
Ten typ application/octet-stream
był obsługiwany specjalnie. Ponieważ ma to być najbardziej ogólny typ, oznaczający dowolny strumień bajtów, nie powinien istnieć żaden program obsługi, który mógłby zastosować się do wszystkich plików tego „typu”. Przykładowo, w Firefoksie, to manifestuje się jako niezdolność do ustawienia domyślnego programu obsługi dla application/octet-stream
.
Niektóre witryny wykorzystywały również niestandardowe typy. Widziałem application/force-download
używane - co kończy się pobraniem, ponieważ przeglądarka nie rozpoznaje lub nie wie, co zrobić z tym typem, ale nie cieszy się specjalną obsługą, application/octet-stream
która to robi.
Trochę lekcji historii
Aby zobaczyć, jak obsługiwane są pliki PDF, możemy zagłębić się w historię online. Zobacz, w przeszłości przeglądarki nie miały pojęcia, co to jest plik PDF. Więc nie mogli go otworzyć. Ale widzieliśmy, że pliki PDF są otwierane w przeglądarkach na długo przedtem, zanim wbudowane przeglądarki plików PDF stały się rzeczą, więc jak to działało?
Kiedyś można było rozszerzyć funkcjonalność przeglądarki o znacznie większą kontrolę niż to, co można zrobić z ograniczonymi rozszerzeniami / dodatkami w dzisiejszych czasach. Najczęściej były one znane jako wtyczki . W Internet Explorerze były to formanty ActiveX; w Mozilla Firefox i później Google Chrome były to wtyczki NPAPI. Wtyczki te były w stanie zrobić wszystko, co mógł zrobić każdy inny program, a dodatkowo mogły zarejestrować się jako program obsługi określonego typu pliku, który w przeciwnym razie mógłby nie zostać rozpoznany przez przeglądarkę. (Nawiasem mówiąc, okazało się to później ogromnym zagrożeniem bezpieczeństwa, a wsparcie dla tych potężnych wtyczek było stopniowo odrzucane ...)
W czasach wtyczek instalowałeś program Adobe Acrobat Reader, który następnie instalowałby wtyczkę ActiveX lub NPAPI, która rejestrowałaby application/pdf
typ MIME i kazała przeglądarce otwierać te typy bezpośrednio za pomocą wtyczki.
Oczywiście, po wielu problemach z bezpieczeństwem i wydajnością spowodowanych przez te wtyczki, główni dostawcy przeglądarek postanowili włączyć własne przeglądarki plików PDF, jednocześnie wycofując obsługę większości wtyczek. Jedynym, który wciąż widzimy, jest Adobe Shockwave Flash, który obsługuje application/x-shockwave-flash
.
W rzeczywistości nadal istnieją pewne resztkowe elementy sterujące, np. W przeglądarce Firefox Preview in Firefox
opcja nadal istnieje:
W przeszłości umożliwiałoby to wybór między wieloma wtyczkami, które zarejestrowały ten typ. Na przykład lista zarejestrowanych typów Flasha:
Te dni upłynęły także przed dużą ilością wsparcia medialnego z HTML5. To nie były tylko pliki PDF - Twoja przeglądarka nie miałaby pojęcia, jak obsługiwać kontener MP4 lub wideo H.264, nie miała pojęcia, jak odtwarzać plik MP3 itp. Itp. Zobaczyłbyś wtyczki dostarczane przez odtwarzacze multimedialne, takie jak VLC lub nawet Windows Media Player, lub strony internetowe osadziłyby odtwarzacz multimedialny wbudowany we Flash.
Content-Type: application/octet-stream
ale obecnie jest to znacznie mniej powszechne.Znalazłem wyjaśnienie. Według jednej odpowiedzi znalazłem , wydaje się, że Chrome będzie pobrać plik PDF, jeśli typ zawartości MIME jest ustawiony, aby nie
application/pdf
ale raczej „nieprawidłowy lub ogólny typ MIME”application/octet-stream
.Ponadto „Większość serwerów WWW wysyła zasoby nieznanego typu przy użyciu domyślnego
application/octet-stream
typu MIME. Ze względów bezpieczeństwa większość przeglądarek nie zezwala na ustawienie niestandardowej domyślnej akcji dla takich zasobów, zmuszając użytkownika do zapisania jej na dysku, aby z niej skorzystać”.źródło
Wynika to z nagłówka HTTP
Content-Disposition
określającego, że plik jest załącznikiem . To instruuje przeglądarkę, aby pobrać plik, zamiast otwierać go bezpośrednio.Istnieje dodatek do przeglądarki Chrome, który może zastąpić to zachowanie. Poniższy obraz pochodzi z narzędzi programistycznych Firefox:
źródło