トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/57

ページの作成や編集にはユーザ登録が必要です。

HTTPヘッダにLast-Modifiedセクションを付け加える改造(recentプラグイン)

  • 投稿者: BJM(と)
  • カテゴリ: 修正
  • 優先度: 重要
  • 状態: 提案
  • 日時: 2003年09月24日 01時45分24秒

 内容

recentプラグインのキャッシュを利用して、HTTPヘッダにLast-Modifiedセクションを付け加える改造を施しました。

RFC2616曰く、

HTTP/1.1 サーバは、可能であればいつでも Last-Modified を送るべきである

ということですので(Studying HTTP)、RSSがあるからといわずに、Last-Modifiedセクションを出力すべきでしょう。

recentプラグインを利用していますので、有効無効がrecentプラグインと連動しています。

これはあまり良いこととは思いませんが、毎回出力されるものなのでrecent.chaceを使用し、負荷軽減を狙いました。

気が向いたら、管理者メニューから切り替えられるようにしたいと考えております。

添付アーカイブは3.5系ですが、改造部分は3.4、3.5共通だと思います。

 コメント

  • 確認していませんが、recentを使っているということは多分、Wikiソースの最終更新時間でLast-Modifiedセクションを生成しているのですよね。でも、ページの中に include された部分の方がページ自体のソースよりも新しい場合は、新しい方の時間を採用してほしいです。ソースとして変わっていなくても、生成されるHTMLとしては更新されていることになりますので。(これはLastModifiedプラグインへの要望でもありますが) - 名無しさん (2003年09月24日 16時37分59秒)
  • いいえ、(&page=を無視して)Wiki全体の最終更新時刻を返すようにしています。これって、RFCに従ってないと判断されるのでしょうか? こちらの意図としましては、RSSではなくLast-Modifiedで更新の有無を判断したいという要求に基づいて作ったのですが[1]。ページごとに連動するならば、LastModifiedプラグインと連動する方が自然ですね。 - BJM(と) (2003年09月24日 18時23分09秒)
  • これ、難しい問題がありまして、プラグインによってはWikiページ以外からデータをえている物があります(たとえばaccess系やrefなどのattach系、外部サーバを使うrss系など)。一方、Last-Modifiedはブラウザやプロクシがキャッシュの正当性を確認するのに使っているため、これらのプラグインの内容が反映されない場合が出てきます。まぁ、どれかのページが更新されるまでの間なので気にしないと割り切るのもありかも知れません(笑) - typer (2003年09月24日 23時22分41秒)
  • あと、確認していませんが、サーバがクライアントからIf-Modified-Sinceを受け取り、かつCGIからLast-Modifiedを受け取った場合、サーバが304を返したと思います。この時、CGIの側でどちらなのか判断して処理を終了すれば負荷軽減をはかれると思います。ただ、Last-Modifiedを厳密に求めようとすると結局対象ページをパースする必要がでてそんなに軽減できない気もします。 - typer (2003年09月24日 23時36分52秒)
  • Last-Modifiedの時刻がIf-Modified-Sinceの時刻より前であれば304を返すと云うものですね(RFC2616 section14.25 より)。確かに、あるincludeされた部分がIf-Modified-Sinceの時刻より新しい場合、そこで打ちきってドキュメントを生成し直すというような場合、有効と言えるかもしれません[2]。といっても、現状では
Pragma: no-cache
Cache-Control: no-cache

を吐いているので関係なさそうなのですが。 - BJM(と) (2003年09月24日 23時54分14秒)

  • 関係ない話ですが個人的には「気が向いたら、管理者メニューから切り替えられるようにしたいと考えております。」に賛成です。勤務時間中に個人ページを更新していたのがバレると困るので。。。。 - ほえほえ (2003年09月25日 05時47分43秒)
  • ここにぶらさげるよりは新規の議題にすべきネタかもしれませんが。WalWikiで実装されているのですが、編集時に「タイムスタンプを更新しない」という機能があると便利です。目的は、メンテのため(たとえばカテゴリを定義するとか)のごくわずかな変更で修正履歴がごっそり変わってしまうのを防ぐためです。 - 希 (2003年09月26日 02時47分53秒)
  • pukiでも実装されていてFSWikiでの実装をお願いしたいです。さらにオフとぴですが、Wikipediaのように更新のサマリをつけれたりするとさらにうれしいです。 - ざ (2003年09月26日 05時17分33秒)
  • 今、ファイルの更新日時にファイルのタイムスタンプを使ってませんでしたか?それだと、タイムスタンプを更新しないと出来るのは、rootアクセス出来る場合だけに限られると思います。別にファイル更新日時だけの管理ファイルがあると出来ますが。 - Kinsan (2003年09月27日 07時44分54秒)
  • 今、手元のFreeBSDとdebianで確認しましたが、ファイルの所有者ならば変更できます。逆に所有者でなければ書き込み権があっても変更できないようです。 - typer (2003年09月27日 23時15分01秒)
  • インストール時のユーザーとwebアクセス時のユーザーが違うと、インストール時に既にあるファイルやバックアップから書き戻したファイルで問題が起きそうですね。 - にらたま (2003年09月28日 00時38分40秒)
  • 回避作がないわけでもないです。ディレクトリへの書き込み権があるはずなので元のファイルを消して新しいファイルを作ればよいです - typer (2003年09月28日 02時55分40秒)
  • あ、ページ更新時のconflict検出にlastmodified使ってますね。うーんと、両立はあきらめましょう(笑) - typer (2003年09月28日 03時03分55秒)
  • どうも、一部のブラウザでは no-cache系のヘッダを無視して、キャッシュしてしまっているようです。この場合、例えばMenuなど動的に挿入されるページに施された変更やrecentの結果などが反映されません。従って、action=LASTMODIFIED というアクションハンドラでのみ Last-Modified セクションを足すようにした方がいいかもしれません。自分で改造しておいてなんですが、ちょっと思慮の足りない実装だったかなと思います。 - BJM(と) (2003年10月29日 02時35分15秒)
  • どうも、3.6.2でプラグインインストールに失敗するみたいです・・・ - 屋根裏 (2008年10月05日 15時57分44秒)
お名前: コメント:
  • [1]この件とは独立ですが、iswebではRSSにまで広告が埋め込まれてしまうという事情もあります。こちらは、staticにRSSのファイルを作ることでも回避できそうですが。
  • [2]全て走査してもIf-Modified-Sinceの時刻より新しいものが出ない場合は304を返し、その結果を受けてキャッシュを利用する……で正しいのですよね?

最終更新時間:2014年10月26日 00時21分30秒