Grundsätzlich geschieht dies, weil die Website den Browser auffordert, dies zu tun. Gelegentlich liegt es daran, dass der Website-Entwickler entscheidet, dass dieses Verhalten gewünscht wird, z. B. bei Websites zur Dateifreigabe. In anderen Fällen ist dies eine Standardoption für die von ihnen verwendete Software (z. B. Forum- oder Blogging-Software). Manchmal liegt es daran, dass der Site-Entwickler keine Ahnung hat, was er tut.
Content-Disposition
Dies liegt normalerweise daran, dass die Site Content-Disposition
in der Antwort einen Header sendet . Insbesondere kann es entweder inline
oder senden attachment
.
inline
Wenn nicht anders angegeben, ist dies die Standardeinstellung. Dies bedeutet, dass der Browser die Datei im Browserfenster öffnet, wenn dies möglich ist.
attachment
bedeutet, dass Sie die Datei immer herunterladen und niemals versuchen, sie im Browser zu öffnen.
Wenn Sie die Entwicklertools Ihres Browsers öffnen, sehen Sie, dass über einen bestimmten Link die folgenden Antwortheader gesendet werden:
Content-Disposition: attachment; filename="Schubert-Sonata-21-B-flat.pdf"
Content-Type: application/pdf
Dadurch wird der Browser angewiesen,attachment
die Datei immer herunterzuladen ( ) und ihr den Standarddateinamen zuzuweisen, Schubert-Sonata-21-B-flat.pdf
anstatt sie aus der URL abzuleiten. Außerdem wird dem Browser (korrekt) mitgeteilt, dass es sich um eine application/pdf
Datei handelt. Da es sich jedoch um eine Datei handelt, wird attachment
der Browser weiterhin standardmäßig heruntergeladen.
Details zur Inline-Bearbeitung
Wenn a Content-Disposition
inline (oder nicht angegeben) ist, versucht der Browser, die Datei im eingebetteten Standard-Viewer zu öffnen. Dies funktioniert nur, wenn der Browser den Dateityp und das Öffnen dieses Typs kennt.
Typerkennung
Der Dateityp kann vom Server mit einem Content-Type
Header angegeben werden. Zum Beispiel sind die häufigsten Inline - Typen text/html
, application/javascript
und text/css
die drei Hauptteile einer modernen Website bilden. Sie können auch mehr esoterische Typen wie haben application/pdf
.
Eine andere Möglichkeit ist, dass der Server eine Content-Type
von angegeben hat application/octet-stream
. Dies ist der allgemeinste Typ, und er gibt dem Browser an, dass es sich bei der Datei nur um beliebige Daten handelt. Zu diesem Zeitpunkt kann der Browser sie nur herunterladen (theoretisch - wir werden darauf zurückkommen).
Wenn ein Content-Type
nicht durch den Server angegeben (und manchmal sogar , wenn es ist), kann der Browser durchführen , was bekanntlich Sniffing zu versuchen , die Art zu erraten , indem Sie die Datei und suchen nach Mustern zu lesen.
Typbehandlung
Nach dem Empfang einer Datei mit einer inline
oder einer nicht angegebenen Disposition muss der Browser versuchen, diese nach Möglichkeit im Browser zu öffnen. Zu diesem Zweck wird der Dateityp überprüft. Wenn der Dateityp erkannt wird, wird versucht, ihn zu öffnen. Die meisten Browser öffnen einen beliebigen text/
Typ in einem einfachen Text-Viewer, versuchen, ihn text/html
als Webseite zu rendern , öffnen ihnapplication/json
möglicherweise in einem speziellen, syntaktisch hervorgehobenen Viewer usw.
Der Typ application/octet-stream
wurde speziell behandelt. Da es sich um den allgemeinsten Typ handeln soll, der einen willkürlichen Strom von Bytes bezeichnet, sollte es keinen Handler geben, der auf alle Dateien dieses "Typs" angewendet werden kann. In Firefox zeigt sich dies beispielsweise darin, dass der Standardhandler für nicht festgelegt werden kann application/octet-stream
.
Einige Websites haben auch nicht standardmäßige Typen verwendet. Ich habe application/force-download
gebraucht gesehen - was als Download endet, weil der Browser nicht erkennt oder weiß, was er sonst mit dem Typ machen soll, aber nicht die spezielle Handhabung genießt, die das application/octet-stream
macht.
Ein bisschen wie eine Geschichtsstunde
Um zu sehen, wie mit PDFs umgegangen wird, können wir uns ein wenig mit dem Webprotokoll befassen. In der Vergangenheit hatten Browser keine Ahnung, was ein PDF ist. Sie konnten es also nicht öffnen. Aber wir haben gesehen, dass PDFs in Browsern geöffnet wurden, lange bevor integrierte PDF-Viewer zum Einsatz kamen. Wie funktionierte das?
Früher war es möglich, die Browserfunktionalität mit weitaus mehr Kontrolle zu erweitern, als dies heutzutage mit eingeschränkten Erweiterungen / Addons möglich ist. Diese wurden allgemein als Plugins bezeichnet . In Internet Explorer handelte es sich um ActiveX-Steuerelemente. In Mozilla Firefox und später in Google Chrome handelte es sich um NPAPI-Plugins. Diese Plugins waren in der Lage, alles zu tun, was jedes andere Programm konnte, und konnten sich zusätzlich als Handler für einen bestimmten Dateityp registrieren, der vom Browser sonst möglicherweise nicht erkannt würde. (Im Übrigen stellte dies später ein großes Sicherheitsrisiko dar und die Unterstützung für diese leistungsstarken Plugins wurde nach und nach eingestellt ...)
In den Tagen der Plug-ins würden Sie Adobe Acrobat Reader installieren, der dann ein ActiveX- oder NPAPI-Plug-in installiert, das den application/pdf
MIME-Typ registriert und den Browser anweist, diese Typen inline mit dem Plug-in zu öffnen.
Nach einer Reihe von Sicherheits- und Leistungsproblemen, die durch diese Plugins verursacht wurden, entschieden sich die großen Browser-Anbieter natürlich, ihre eigenen PDF-Viewer einzubinden und die Unterstützung für die meisten Plugins einzustellen. Das einzige, was wir noch sehen, ist Adobe Shockwave Flash application/x-shockwave-flash
.
Es gibt tatsächlich noch ein paar übrig gebliebene Steuerelemente, z. B. in Firefox ist die Preview in Firefox
Option noch vorhanden:
In der Vergangenheit hätte dies die Auswahl zwischen mehreren Plugins ermöglicht, die diesen Typ registriert haben. Zum Beispiel die Liste der registrierten Typen für Flash:
Diese Tage standen auch im Vordergrund der Medienunterstützung, die mit HTML5 einherging. Es waren nicht nur PDFs - Ihr Browser hatte keine Ahnung, wie er mit einem MP4-Container oder einem H.264-Video umgeht, keine Ahnung, wie eine MP3-Datei usw. wiedergegeben wird oder sogar Windows Media Player oder Websites würden einen in Flash eingebauten Media Player einbetten.
Content-Type: application/octet-stream
aber das ist heutzutage viel seltener.