33943


pdfファイルをダウンロードするのではなくブラウザのタブ表示をしたいのですが、以下同じコードで、pdfファイルをブラウザ表示できるサイトとどうしてもダウンロードしてしまうサイトがあります。  
サーバ環境によるのでしょうか？

[code]

    <p><a href="/pdf/abc.pdf" target="_blank"><font>&nbsp&nbsp</font> pdfのダウンロード</a></p>
    
[/code]

サーバ移行でlaravelに移し換えようとして、この事象が発生しました。  
旧本番サイトだとできるのに、開発環境だとできない事象です。  
linux(centOS)のバージョン違い、ファイルの権限、webサーバの違いなど考えられるでしょうか？


CC BY-SA 3.0
2017-04-12T06:20:58.393
33941
2017-04-12T06:47:58.717
15167
question
html linux laravel pdf
webサーバにあるpdfをブラウザで表示したいです。


WEBサーバの設定を確認するとよいと思います。  
応答するPDFファイルの`Content-Type`が`application/pdf`だとWEBブラウザで直接表示しませんか?
(`application/octet-stream`あたりだと、WEBブラウザが「保存」する動作する場合が多いと思います)  
あと、`Content-Disposition`の有無でWEBブラウザの挙動が変わったと思います。

(いずれにせよ、WEBブラウザの設定にもよるので、そちらも確認したほうがよいと思います)


CC BY-SA 3.0
2017-04-12T06:46:20.433
33942
2017-04-12T06:46:20.433
20098
33941
answer


pdfファイルをプレビューするのはあくまでブラウザの実装です。これを含めこうしたブラウザ側の挙動を強要する権限も手法もサーバー側には存在しないとする解釈が一般的です。  
そのうえでのお話ですが、私も利用しているfirefoxなんかはデフォルトプロファイルだとpdfをプレビューしてくれます。便利です。この機能について言及していると仮定して述べると、私見ではサーバー側のレスポンス、すなわちサイトの設定に依存すると思われます。

例:  
\- プレビューが開く:[MISRA-C：2004から2012への移行の課題 -
IPA](https://www.ipa.go.jp/files/000043914.pdf)  
\- ダウンロードダイアログが開く:[AMENDMENT
C99](http://www.southgippsland.vic.gov.au/download/downloads/id/496/c99_new_eso8_map.pdf)

両者のサーバーレスポンスを見ると、

[code]

    HTTP/1.1 200 OK
    Date: Wed, 12 Apr 2017 06:38:06 GMT
    Server: Apache
    Last-Modified: Wed, 08 Mar 2017 06:21:47 GMT
    Etag: "14712e-15a5ff-54a3224a51291"
    Accept-Ranges: bytes
    Content-Length: 1418751
    Connection: close
    Content-Type: application/pdf
    
    HTTP/1.1 200 OK
    Date: Wed, 12 Apr 2017 06:36:41 GMT
    Server: Apache
    Expires: Mon, 26 Jul 1997 05:00:00 GMT
    Cache-Control: must-revalidate, post-check=0, pre-check=0
    Content-Disposition: attachment; filename="Amendment_C99_ESO8_Map_for_adoption.pdf"
    Pragma: public
    Set-Cookie: TestCookie=Test; path=/; domain=www.southgippsland.vic.gov.au; httponly
    X-Frame-Options: SAMEORIGIN
    Content-Length: 114417
    Keep-Alive: timeout=5, max=100
    Connection: Keep-Alive
    Content-Type: application/pdf
    
[/code]

という状況です。注目するのは後者の[Content-Disposition](https://developer.mozilla.org/en-
US/docs/Web/HTTP/Headers/Content-Disposition)ヘッダです。MDNを引用しますと

> The first parameter in the HTTP context is either inline (default value,
> indicating it can be display inside the Web page, or as the Web page) or
> **attachment (indicating it should be downloaded; most browsers presenting a
> 'Save as' dialog** , prefilled with the value of the filename parameters if
> present

ということで、`Content-Disposition:
attachment`ヘッダが指定されたレスポンス時には、プレビューではなくダウンロード用のダイアログを表示するのが理想的な実装とされています。おそらく（少なくともfirefoxは）これに従った挙動をしますので、ご指摘のような結果が生ずるものと思われます。

本回答での結論として、

  1. プレビューするかはブラウザ依存、サーバーでは基本的に制御できない。
  2. `Content-Disposition`ヘッダで挙動を指定することができる **かもしれない** 。
  3. 必ず表示したいならば、独自にクライアントサイドで実装する必要がある。

とさせていただきます。以上、参考になれば幸いです。


CC BY-SA 3.0
2017-04-12T06:47:58.717
33943
2017-04-12T06:47:58.717
33941
answer