2013-09-03 14 views
6

REST Webサービスからオブジェクトを取得し、このオブジェクトにタイムスタンプがあるとします。このタイムスタンプにはミリ秒の要素があります。次回は同じオブジェクトを要求しましたが、変更されていない限り返されることはありません。したがって、If-Modified-Sinceヘッダーを使用します。しかし、そのヘッダーの日付は、ミリ秒を持っていることさえありません。私がタイムスタンプを丸めると、私はいつもオブジェクトが常に修正されているかのように戻します。私がそれを丸めると、いくつかの更新が失われる危険性があります。この場合、If-Modified-Sinceヘッダーは完全に役に立たないのですか、何か不足していますか?HTTP If-Modified-Sinceミリ秒

答えて

9

ミリ秒のタイムスタンプを送信するサービスは、HTTPに準拠していません。

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は非常に明確に指定§3.3.1HTTP-日として送らなければなりません。 Last-ModifiedまたはIf-Modified-Sinceをミリ秒で送信することは無効です。

秒未満の精度が重要な場合は、entity tags (ETag)を使用する方が適切な場合があります。

+0

私が受け取っているタイムスタンプはLast-Modifiedヘッダーではなく、オブジェクト自体のプロパティです。 If-Modified-Sinceを使って返信したかったのです。 –

+1

@JoeShmo:答えが成り立ちます。 'If​​-Modified-Since'は* HTTP-date *でなければなりません(ミリ秒を送信できないことを意味します)。使用しているサービスがそれをサポートしていなければなりません。問題のサービスについてもっと知ることなく、もっと多くのことを言うのは難しいです。 – josh3736