8

REST Web サービスからオブジェクトを取得し、このオブジェクトにタイム スタンプがあるとします。このタイムスタンプにはミリ秒のコンポーネントがあります。次に同じオブジェクトをリクエストするときは、オブジェクトが変更されていない限り返されたくないので、If-Modified-Since ヘッダーを使用します。しかし、そのヘッダーの日付はミリ秒を持つことさえ想定されていません。タイム スタンプを切り下げると、常に変更されているかのようにオブジェクトが返されます。切り上げると、いくつかの更新が失われる危険があります。この場合、If-Modified-Since ヘッダーはまったく役に立たないのでしょうか、それとも何か不足していますか?

4

1 に答える 1

14

ミリ秒単位のタイム スタンプを送信するサービスは、HTTP に準拠していません。 §3.3.1で非常に明確に指定されているHTTP 日付Last-Modifiedとして送信する必要があります。

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"

使用しているサービスにバグを報告します。Last-ModifiedまたはIf-Modified-Sinceミリ秒で送信することは無効です。

1 秒未満の精度が重要な場合は、エンティティ タグ ( ETag)を使用する方が適切な場合があります。

于 2013-09-03T23:54:38.927 に答える