水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > If-Modified-Since の書式

If-Modified-Since の書式

2003年5月13日(火曜日)

If-Modified-Since の書式

RFC2616では、If-Modified-Since の書式はこうなっています。

If-Modified-Since = "If-Modified-Since" ":" HTTP-date

以上、RFC2616 14.25 If-Modified-Since より

HTTP-date の定義は以下の通り。

HTTP-date = rfc1123-date | rfc850-date | asctime-date

rfc1123-date = wkday "," SP date1 SP time SP "GMT"

rfc850-date = weekday "," SP date2 SP time SP "GMT"

asctime-date = wkday SP date3 SP time SP 4DIGIT

date1 = 2DIGIT SP month SP 4DIGIT ; day month year (e.g., 02 Jun 1982)

date2 = 2DIGIT "-" month "-" 2DIGIT ; day-month-year (e.g., 02-Jun-82)

date3 = month SP ( 2DIGIT | ( SP 1DIGIT )) ; month day (e.g., Jun 2)

time = 2DIGIT ":" 2DIGIT ":" 2DIGIT ; 00:00:00 - 23:59:59

wkday = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"

weekday = "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday"

month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"

以上、RFC2616 3.3.1 Full Date より

で、これのどこを読むと

If-Modified-Since : Fri, 09 May 2003 12:59:14 GMT; length=67040

なんてフィールドを送って良いという結論に達するのか全く理解できません。セミコロン以降のオマケは明らかに RFC 違反なのですが。

この IMS は主に大手企業のネットワークから送られてくるのですが、共通しているのは Squid (www.squid-cache.org) が使われているらしいこと。つまり Squid がわざわざ違法なものをつけ加えているようなのです。どうしてこんな余計なことをするのでしょうか Squid は。

まあ愚痴はともかくとして、hatomaru.dll はこんな IMS が送られてくることを考慮しておらず、IMS の値をそのまま DateTime.Parse に渡しています。そのため ;length= なんておまけが付いていると例外 (System.FormatException) が発生して死亡、500 Internal Server Error となって果てるわけです。Referer の件にしてもそうなのですが、とにかく RFC に反するものにはメチャクチャ弱いです。

これも対処しないと……。

関連する話題: Web / http / hatomaru.dll

最近の日記

関わった本など