2013-09-03 43 views
6

Giả sử tôi nhận được một đối tượng từ dịch vụ web REST và đối tượng này có dấu thời gian. Dấu thời gian này có thành phần mili giây. Lần sau tôi yêu cầu cùng một đối tượng mà tôi không muốn nó được trả về trừ khi nó đã thay đổi, vì vậy tôi sử dụng tiêu đề If-Modified-Since. Nhưng ngày trong tiêu đề đó thậm chí không phải là mili giây. Nếu tôi làm tròn dấu thời gian xuống, tôi sẽ luôn lấy lại vật thể như thể nó luôn được sửa đổi. Nếu tôi làm tròn nó, tôi có nguy cơ thiếu một số cập nhật. Là tiêu đề If-Modified-Since hoàn toàn vô dụng đối với tôi trong trường hợp này hay tôi đang thiếu cái gì đó?HTTP If-Modified-Since với mili giây

Trả lời

9

Dịch vụ gửi tem thời gian bằng mili giây không tuân thủ HTTP. Last-Modified PHẢI được gửi dưới dạng một HTTP cập nhật§3.3.1 xác định rất rõ ràng:

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" 

cáo lỗi với các dịch vụ mà bạn đang sử dụng. Không hợp lệ để gửi Last-Modified hoặc If-Modified-Since với mili giây.

Nếu độ chính xác phụ thứ hai là quan trọng, có thể phù hợp hơn khi sử dụng entity tags (ETag).

+0

Dấu thời gian tôi nhận được không đến như tiêu đề sửa đổi lần cuối, đó là thuộc tính của đối tượng. Tôi muốn gửi lại bằng cách sử dụng If-Modified-Since. –

+1

@JoeShmo: Câu trả lời được giữ. 'If-Modified-Since' PHẢI là một * HTTP-date * (nghĩa là bạn không thể gửi mili giây), và dịch vụ bạn đang sử dụng phải hỗ trợ nó. Nếu không biết nhiều hơn về dịch vụ được đề cập, thật khó để nói nhiều hơn nữa. – josh3736