基本的に、これはWebサイトがブラウザに実行するように指示するために発生します。時々、それはウェブサイトの開発者が彼らがこの振る舞いを望むと決めるからです。例えば、ファイル共有サイトで一般的です。また、使用しているソフトウェア(フォーラムやブログソフトウェアなど)のデフォルトオプションである場合もあります。時々、それはサイト開発者が彼らが何をしているかわからないからです。
Content-Disposition
これは通常、サイトが応答でContent-Disposition
ヘッダーを送信するためです。具体的には、inline
またはのいずれかを送信できますattachment
。
inline
特に指定されていない場合はデフォルトであり、ブラウザは可能な場合にブラウザウィンドウ内でファイルを開くことを意味します。
attachment
ファイルを常にダウンロードすることを意味し、ブラウザ内でファイルを開かないでください。
ブラウザの開発者ツールを開くと、特定のリンクが次の応答ヘッダーを送信していることがわかります。
Content-Disposition: attachment; filename="Schubert-Sonata-21-B-flat.pdf"
Content-Type: application/pdf
これにより、ブラウザは常にattachment
ファイルをダウンロード()Schubert-Sonata-21-B-flat.pdf
し、URLから推測するのではなく、デフォルトのファイル名を指定します。さらに、ブラウザにapplication/pdf
ファイルであることを(正しく)伝えますが、ブラウザであるattachment
ため、ブラウザは引き続きデフォルトでダウンロードします。
インライン処理の詳細
場合にはContent-Disposition
、インライン(または未指定)で、ブラウザはデフォルトの組み込みビューアでファイルを開こうとします。ブラウザはそれが何であるか、ファイルの種類を知っている、場合にのみ動作し、ブラウザがそのタイプを開く方法を知っています。
タイプ検出
ファイルタイプは、Content-Type
ヘッダーを使用してサーバーによって指定できます。たとえば、最も一般的なインラインタイプはtext/html
、application/javascript
およびtext/css
で、最新のWebサイトの3つの主要部分を構成しています。のようなより難解なタイプを持つこともできapplication/pdf
ます。
別の可能性は、サーバーがを指定したことContent-Type
ですapplication/octet-stream
。これは最も一般的なタイプであり、ファイルが任意のデータであることをブラウザに伝えます-その時点でブラウザができることはそれをダウンロードすることだけです(理論的には-それに到達します)。
Content-Type
サーバーによってa が指定されていない場合(場合によっては指定されている場合でも)、ブラウザーはファイルを読み込んでパターンを探すことでタイプを推測しようとするスニッフィングを実行できます。
タイプ処理
inline
処理が指定されていない、または指定されていないファイルを受信すると、ブラウザは、可能であればブラウザ内でそのファイルを開こうとする必要があります。これを行うには、ファイルの種類を調べ、その種類を認識すると、ファイルを開こうとします。ほとんどのブラウザーはtext/
、単純なテキストビューアーで任意のタイプを開きtext/html
、Webページとしてレンダリングしようとします。また、構文が強調さapplication/json
れた特別なビューアーなどで開きます。
タイプapplication/octet-stream
は特別に処理されました。これは、バイトの任意のストリームを示す最も一般的なタイプであると想定されているため、この「タイプ」のすべてのファイルに適用できるハンドラーは想定されていません。例えば、Firefoxでは、これはデフォルトのハンドラを設定することができないとして現れるためにapplication/octet-stream
。
一部のWebサイトでは、非標準タイプも使用されています。私はapplication/force-download
使用しているのを見ました-ブラウザはタイプを他に何をすべきかを認識または知らないため、ダウンロードとして終わりますが、そうする特別な処理を楽しんでいませんapplication/octet-stream
。
ちょっとした歴史の教訓
PDFの処理方法を確認するには、Webの履歴を少し掘り下げます。過去には、ブラウザがPDFが何であるかを知らなかったことがわかります。そのため、彼らはそれを開くことができませんでした。しかし、組み込みのPDFビューアが登場するずっと前から、ブラウザでPDFが開かれているのを見てきました。
以前は、制限された拡張機能やアドオンでできることよりもはるかに多くの制御を使用して、ブラウザの機能を拡張することが可能でした。それらは最も一般的にプラグインとして知られていました。Internet Explorerでは、これらはActiveXコントロールでした。Mozilla Firefoxおよびそれ以降のGoogle Chromeでは、NPAPIプラグインでした。これらのプラグインは、他のプログラムが実行できるすべての処理を実行でき、ブラウザによって認識されない可能性のある特定のファイルタイプのハンドラーとして追加登録できました。(ちなみに、これは後に大きなセキュリティリスクであることが判明し、これらの強力なプラグインのサポートは徐々に削除されました...)
プラグインの時代には、Adobe Acrobat Readerをインストールして、ActiveXまたはNPAPIプラグインをインストールし、application/pdf
MIMEタイプを登録して、ブラウザーにプラグインを使用してこれらのタイプをインラインで開くように指示します。
もちろん、これらのプラグインに起因するセキュリティおよびパフォーマンスの問題が多数発生した後、主要なブラウザーベンダーは、ほとんどのプラグインのサポートを段階的に廃止しながら、独自のPDFビューアーを組み込むことを決定しました。まだ表示されているのは、Adobe Shockwave Flashのみapplication/x-shockwave-flash
です。
実際には、このためにまだいくつかのコントロールが残っています。たとえば、FirefoxにはPreview in Firefox
オプションがまだ存在します。
以前は、これにより、そのタイプを登録した複数のプラグインから選択できました。たとえば、Flashの登録済みタイプのリスト:
当時は、HTML5に付属する多くのメディアサポートの前でもありました。PDFだけではありませんでした。ブラウザには、MP4コンテナやH.264ビデオの処理方法、MP3ファイルの再生方法などがわかりません。VLCなどのメディアプレーヤーが提供するプラグインが表示されます。または、Windows Media Player、またはWebサイトにFlashに組み込まれたメディアプレーヤーを埋め込むこともできます。
Content-Type: application/octet-stream
たときにも発生することがありますが、最近ではそれほど一般的ではありません。