■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50

read.cgi改良スレッド 2

407 :デフォルトの名無しさん :01/09/18 07:09
んーっと、とりあえず、ETag実装してみた。
知識が足りないので、これでいいのかもよくわからない。
足りない点や見落としなど含め、意見求む。
大幅に書きなおしてくれる人も歓迎。

動作は、まず当初の目的を考えたので、
to=nnが指定されている時だけETagを出力するようにした。
main()の流れは、こんな感じ。
・・LastModifiedチェックの後、atexitを登録してから、
#ifdefPUT_ETAG
 if (need_etag(st, to, ls)) {
  char etag[60];
  dat_read(fname, st, to, ls);
  create_etag(etag);
  if (match_etag(etag)) {
   puts("Status: 304 Not Modified\n");
   return 0;
  }
  printf("ETag: %s\n", etag);
 }
#endif
出力部のチェックサムは、とりあえずcrc32を使い、
>>173を参考に、dat_read()の先頭でBigBufferをチェックするようにした。
また、影響を少なくするため、NotModifiedを返すのは混雑時のみにした。

出力情報は、%x形式で、
ETag: "crc-全サイズ-全レス数-送信部サイズ-送信部レス数-flag"
flagは出力が混雑時のものか、等。
かなり冗長で使っていない情報も出力しているが、
必要最小限にすべきか?
もし、ツール等が使う可能性があるなら、
to=nn以外のリクエストにも必要があるかも。

今のままだと、st=1&to=150とした場合、
時間帯が異なると必ず更新扱いされてしまう。
リクエストのレス全てから算出した値と
実際に出力するレスから算出した値を両方求め、
それぞれと比較して一致したら304を返す方が望ましい?

動作確認は、apacheをいれてないので中途半端にしか出来ていない。
・ETag出力の確認
・match_etagがtrue/falseを返す時の出力をそれぞれ確認
・HTTP_IF_NONE_MATCHをputenvして、datに手動で行を追加して確認
等はしたものの、
IEのリクエストから動作を確認したわけではないので、
ONにする前に(可能な人に)動作確認をお願いしたい。
NotModifiedを返す条件も募集中(追加をお願い)。

325KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30