メモの日々


2003年07月20日(日)

生活

  • セブンイレブンで買い物したらくじを引けてジュースが当たった。ラッキー。
  • 変な顔をするのが楽しくなっている。いかんいかん。
  • ジェフとジュビロの試合見たかったなあ。相撲なんかいいからサッカーを放送してくれー。今節は引き分けばかり。こんなの当たらんよ。
  • ガキの使いを見る。炊き込みご飯を作る。枝豆を入れてビールで炊くのとお好み焼きを入れて水で炊くのが美味しいらしい。コーヒー林檎と蜂蜜とカレー煎餅カールナタデココとバナナ紅茶ラーメンケーキはまずい。ナタデココは炊くととても熱くなるようだ。松本のコメントに浜田が腹を抱えてゲラゲラ笑っているのが微笑ましい。

やること

  • 電気カミソリを買う

2005年07月20日(水)

[web][windows] IE6でダウンロードダイアログが2回表示される

問題

ウェブアプリケーションでHTTPヘッダに

Content-Disposition:attachment; filename="foo.csv"
Content-Type: application/octet-stream

を付与することでウェブブラウザにファイルをダウンロードするかどうかを問い合わせるダイアログを表示させようとした。

で、手元のIE6だと「開く」「保存」「キャンセル」「詳細情報」を選ぶダイアログが表示されるのだけれど、ここで「開く」を選んだときに再度同じダイアログが表示されてしまう、という問題に遭遇した。2度目のダイアログで「開く」を選ぶと正しくファイルの内容が表示される。

調査

別のウェブアプリケーションで試すと、ダイアログが2回表示されるという問題は発生しない。HTTPヘッダを比べると、問題が発生する方だけCache-Controlヘッダなどが付与されておりこの辺が怪しい。

で、テスト用に

<?php
header('Content-type: application/octet-stream');
header('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
header('Content-Disposition: attachment; filename="test.csv"');
echo 'test,test,test';
?>

というPHPコードを書いて再現させようとしたが、

Internet Explorer では、xxx.xxx.xxx.xxx - xxx.xxx をダウンロードできません。

このインターネットのサイトを開くことができませんでした。要求されたサイトが使用できないか、見つけることができません。後でやり直してください。

というエラーになってしまった。マイクロソフトのサイトにあるContent-Disposition: attachemnt と Cache-Control: no-cache によるダウンロードの問題が発生しているように思われる。(追記:本件はInternet Explorer が SSL 経由によるファイルのダウンロードで "No-Cache" ヘッダーを処理できないが原因かもしれない。当時SSLを使用していたかは覚えていないが、エラーメッセージはこちらと一致する。)

では何故件のウェブアプリケーションではこのエラーが表示されないのか。どちらのプログラムが返すHTTPヘッダも同じに見えるのだが。

これ以上先に進めなくて、結局どのような場合にダウンロードのダイアログが2回表示されるのかは分からなかった。

回避方法

現象はよく分からないままだが、回避方法はある。Content-Dispositionヘッダの値を「attachment」以外の文字列に設定すればよい。attachmentと書きたいけれど、こう書くと変な動作をするのだから仕方ない。

(追記)

@IT会議室に同じような話題があった。

ここに、POSTだと発生しGETだと発生しないという説が書かれていた。あと、マイクロソフトのサポート技術情報にもあるんだな。

ここには

この問題を解決するには (Internet Explorer 5.5 のみ)、Service Pack 2 にアップデートします。

とあるけど、IE6で起こっている。現象は同じでも原因は違うのかも。

(追記2)

はてなにも話題があった

- 送信方法が POST の場合、HTTP ヘッダの Content-Disposition を外すかレジストリを操作することにより回避可能

とあるけどレジストリのどこを操作すればいいのだろう。

(追記3)

2002年のPHP-users MLに、session_cache_limiter()を使用して解決したという話があったのでメモ(ダイアログが2回表示される問題ではないが)。

あと、Content-DispositionヘッダについてはRFC2183で規定されていたのでその日本語訳をメモ。

やること

  • オーブンレンジ用べんり棚
  • ブラウンの安い電動歯ブラシ買う
  • 蛍光灯を捨てる
  • 請書
  • クリーニング
  • 清掃用具
  • 銀行へ行け
本日のツッコミ(全3件) [ツッコミを入れる]

通りすがりの者 [ダイアログボックス2回表示の問題で、同様に困っています。 このページはとても参考になりました。 ありがとうございまし..]

感謝してます男 [「黒い画面⇔白黒の縦じま」を繰り返していたのですが、 1時間ほど置いていましたら、正常に動作するようになりました。 ..]

感謝してます男 [投稿ミスです。すいません。]


2006年07月20日(木)

  • なかなか集中できない。いかんな。
  • 今日の行数:6515
  • コードの重複した部分をまとめたので少しすっきりした。が、まとめ方がちょっと強引で後々混乱するかも。

やること

  • デザイン変更
  • 保険
  • ツールのDVDを観る
  • クリーニング
  • OOo
  • JDK

2007年07月20日(金)

  • 皆山梨の方へ行ったようだ。

[life] 図書館へ行く

図書館で

  • 半島を出よ 上/下 (村上龍)
  • サッカーマガジン 2007.5.22 「「キャプテンマーク」の誇り」

を借りた。図書館のシステムがダウンしてるとのことで、本の番号を手書きでメモしての貸し出しだった。

帰りに本屋でBoost C++Librariesプログラミング 第2版を買った。

やること

  • 入庫
  • ズボンを洗う