HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿
返信数: 14

http://support.microsoft.com/default.aspx/kb/812935/ja

本校にてhttps接続で利用しているMoodleサイトがあります.そちらのサイト内にコースを持つ先生から,学生がアップロードした課題をIEではダウンロードできない,という報告がありました.エラーメッセージは”ファイルをキャッシュに書き込めませんでした”.

調べてみましたところ,https接続しているサイトでIEを使う場合に,ヘッダーのキャッシュコントロールの宣言がIEでは正しく処理できずにエラーに繋がるらしいことは分かりました.ちなみに,Moodle1.9.7+のlib/filelib.phpのfunction send_file()では以下のようにコメントが付いているので対策できているのかと期待したのですが.

    } else { // Do not cache files in proxies and browsers
        if (strpos($CFG->wwwroot, 'https://') === 0) { //https sites - watch out for IE! KB812935 and KB316431
            @header('Cache-Control: max-age=10');
            @header('Expires: '. gmdate('D, d M Y H:i:s', 0) .' GMT');
            @header('Pragma: ');h
        } else { //normal http - prevent caching at all cost

KB812935 : http://support.microsoft.com/default.aspx/kb/812935/ja
KB316431 : http://support.microsoft.com/default.aspx/kb/316431/ja

そして確かにこの問題に現象がぴったりと一致.

提出課題のダウンロードはできないけれども,フォーラムの添付ファイルのダウンロードは可能という報告を受けていますが,提出課題がExcelのファイルであることは確認しましたが,試したフォーラム添付のファイルが同じくExcelかどうかは未確認です.:追加情報 フォーラムのファイルはWordの文書だったそうです.

 なお,Firefoxですと課題のダウンロードも可能だったとのことで,そのファイルを送って頂き,問題の発生しているサーバ上のMoodleのフォーラムに添付し,https接続でダウンロードを試したところ,ダウンロードできてしまいました.

この問題について詳しい情報をお持ちの方,よろしくお願いします.

#実は検索をしていて,以前に一度,この問題に自分も間接的に遭遇していることを発見.

http://moodle.org/mod/forum/discuss.php?d=102251&parent=463649

Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿

上記,IEの問題を回避するコードは,send_file()関数の3つ目の引数である,$lifetimeが指定されている場合は無効です.もしかしてここに解決の糸口があるのか?

Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿

 file.phpを見てみたところ,課題ダウンロード時は,$lifetimeをゼロにセットしていますね.
 これが課題のダウンロードでは失敗し,フォーラムならばダウンロードできた理由に関わりがある可能性があります.

    // security: teachers can view all assignments, students only their own
    if ((count($args) >= 3)
        and (strtolower($args[1]) == 'moddata')
        and (strtolower($args[2]) == 'assignment')) {

        $lifetime = 0;  // do not cache assignments, students may reupload them
        if ($args[4] == $USER->id) {
            //can view own assignemnt submissions
        } else {

でも,ライフタイムがゼロならば問題ないのだと理解しているのですが...

Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿

 もうこれはMoodleに原因のある領域を超えている気はするのですが,上記現象について調べて一番最初に辿りついたのがこちらの情報.

http://narucissus.blogspot.com/2006/10/internet-explorer.html

 この情報を信じるのであれば,

    } else { // Do not cache files in proxies and browsers
        if (strpos($CFG->wwwroot, 'https://') === 0) { //https sites - watch out for IE! KB812935 and KB316431
//          @header('Cache-Control: max-age=10');
            @header('Cache-Control: private');
//          @header('Expires: '. gmdate('D, d M Y H:i:s', 0) .' GMT');
//          @header('Pragma: ');
            @header('Pragma: private');

Cache-Controlについては以下のページの記述を参考にしました.
http://otndnld.oracle.co.jp/document/products/E13158_01/alui/wci/docs103/devguide/tsk_pagelets_settingcaching_httpcachecontrol.html

Expireはこちら.
http://otndnld.oracle.co.jp/document/products/E13158_01/alui/wci/docs103/devguide/tsk_pagelets_settingcaching_httpexpires.html

Pragmaはこちら?
http://suika.fam.cx/~wakaba/wiki/sw/n/Pragma

Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿

 本校サイト以外にもサーバへのアクセスを常時httpsで運用している(ログイン時のみではなく)サイトは多くあると思います.それらのサイトを御利用の方,特に教師として学生がアップロードした課題(Word,Excel, PowerPointなどのOffice製品のファイル)をIEでダウンロードできない,という現象が発生している可能性が予想されます.こちらにはそのような報告がほとんど挙がっていないと記憶しています.もし,「実はそうなんです」という方,是非ともこちらに一言で結構です,返信お願いします.

#FirefoxやSafariならばダウンロードできるから,まぁいいや,というように対処されている可能性が高いです.

ちなみに私はそのhttpsで運用されているサイトにコースを一つ持っていますが,デバッグ用のみで授業に用いていないため,課題が一つもアップロードされていません.したがって検証できません.

Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Haruhiko Okumura の投稿
うちも最初はhttpsオンリーでやっていました。
まさにこの問題が出たので,手を加えた覚えがあります。
ソースに跡が残っていると思います。
いま会議中なので,あとで見てみます。
Haruhiko Okumura への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿

会議中にありがとうございます(笑).Twitterの即時性は素晴らしいですね.

期待しています.

#諸外国では問題にならないのか,またまた日本のIEのみの問題なのでしょうか.


これですか,もしかして.

http://moodle.org/mod/forum/discuss.php?d=28279

ハンダ付け作業中なので,後であるいは明日,良く読んで見ます.

#2005年の時点と随分とfunction send_file()が変わっていますので,その過程でprivateが消えてしまったのでしょうか.

Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Haruhiko Okumura の投稿
あれ,どこだか忘れてしまいました。
マージしているうちになくなった?あるいは本家で対応されたのでなくした?

今はパスワードだけhttps:にしています。
Haruhiko Okumura への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿
本家側でも2005年頃にこの問題に気付いていた形跡がありますので、その際に吸収されたのかも知れませんね。

本校の常時https接続を行っているサイトの管理者の方に、上記修正のお願いをしています。これで症状が改善したら、こちらに報告します。
Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Toshihiro KITA の投稿
展開が速く,ついていけてませんが 笑顔
https の 熊大のサイト Moodle 1.9.7+ (Build: 20100120) で,IE 8.0 で課題に提出されたファイル .docx のダウンロードを試したところ,問題無くダウンロードできました。
再現する条件など示してもらえれば,やってみることはできます。

# Moodleへのパッチは,例の連載の2回目に書いたものを当てただけです。
Toshihiro KITA への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿

 試しに.xlsのファイルでは如何でしょう?

#もし,.docxだと発生しないのだとしたら,IE側の仕様も中途半端ですね.

 あと,もし中継しているサーバの類がキャッシュをprivateに変更するルールを用いている場合は,このクライアント側での拒否は発生しない可能性もありそうです.(よく理解できていませんので憶測に基づいています)

Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿

 ちなみに当方では,添付ファイルのようなエラーが発生します.

 問題の発生しているサイトは,学内からですとhttp/https接続を選んで接続できます.https接続時は添付ファイルのようなエラー,http接続の場合は何事も問題なくダウンロードできます.

 報告を受けた際のエラーメッセージと違います.これは何故かは分かりません.私が実験を行ったのが,教師として課題にアップロードしたファイルを教師としてダウンロードしたことと関係があるのか,あるいはIEのバージョン(私はIE8)の違いによるものなのか.

Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿

 どうやら本校のネットワーク構成による影響だった可能性が高いようです.

 ただ,その仕組みが私には完全に理解できていません.
 熊本大学では問題が無いようですので,標準的なhttps構成であれば問題は生じないものと思われます.もし問題が生じた方は,また御報告お願いします.

 やはり関わるのは,

            @header('Pragma: no-cache');

の類のようです.

 大雑把に言うと,クライアントのブラウザからはhttpsでアクセスされるのですが,途中の機器によりhttpに変換されてMoodleサイトにはアクセスがある.Moodleサイトはhttpからのアクセスであると判断して no-cache のヘッダを付けて応答するが,クライアントPCのIEはhttpsへのアクセスだと思い込んでいるので不具合が発生した,ということのようです.

Tatsuya Shirai への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Haruhiko Okumura の投稿
それで思い出しました。
初期の頃の三重大Moodleの運用も,SSLアクセラレータ経由でしたので,まさにそういうトラブル続出でした。あちこちを書き換えた記憶があります。
今はSSLはログイン時だけにしましたし,オリジナルのMoodleのコードもずっと良くなりましたので,大丈夫だと思っていたのですが,やはりトラブルがありますか。
Haruhiko Okumura への返信

Re: HTTPS接続のサイトからIEではファイルがダウンロードできない場合がある

- Tatsuya Shirai の投稿

そうです,そうです,まさにそのSSLアクセラレータ(:どういうものか分かっていない)経由だそうです.

仕組みは先に書いた通りです.もう,無条件にキャッシュを残さないようにするのが一つの手のようです.

どのサーバでそれを行うのか私には分かりませんが,”moodleコンテンツのヘッダ行に Progma: no-cache がある場合には Progma: と変換するよう設定しました。”とのことです.

他の学校でもSSLアクセラレータを使用していてIEではファイル(Office系)のダウンロードに失敗する場合は同様の設定を行うことで回避できると期待できます.

#backupフォルダのzipファイルもmod/assignmentのファイル同様に$lifetime=0と強制されているのか,同じくダウンロードできなかったそうです.これはOffice系のデータファイルでは無いのですが.