If-Modified-Since の書式
2003年5月13日(火曜日)
If-Modified-Since の書式
RFC2616では、If-Modified-Since の書式はこうなっています。
If-Modified-Since = "If-Modified-Since" ":" HTTP-date
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 に反するものにはメチャクチャ弱いです。
これも対処しないと……。
- 「If-Modified-Since の書式」にコメントを書く
関連する話題: Web / http / hatomaru.dll
- 前(古い): 最終更新日まわり修正
- 次(新しい): 不正な IMS 対処