Không cần bất kỳ nghi ngờ gì. RFC7234 Section 5.2.1.1 bao gồm ví dụ max-age=5
, tất nhiên là lớn hơn 0. Định nghĩa cũng là rõ ràng (tôi nhấn mạnh):
Các "max-age" yêu cầu chỉ thị chỉ ra rằng khách hàng là không muốn chấp nhận một phản ứng có độ tuổi lớn hơn số quy định của giây.
"Số giây được chỉ định" có thể là bất kỳ số nguyên không âm nào (được xác định trong Section 1.2.1). Vì vậy, câu trả lời là có xác định.
Ngoài ra, định nghĩa tôi đã trích dẫn ở trên cũng giải thích hành vi bộ nhớ cache trong kịch bản của bạn. Nhưng trước khi tôi nhận được điều đó, tôi nên sửa các điều sau:
Máy chủ cho người dùng biết rằng tài nguyên được yêu cầu sẽ được xác nhận lại sau 2 phút.
Không chính xác.
Chỉ thị max-age=120
có nghĩa là máy chủ cho tất cả bộ nhớ cache, chứ không phải tác nhân người dùng, rằng phản hồi phải được xem là cũ sau 2 phút. Từ Section 5.2.2.8 (tôi nhấn mạnh):
Các "max-age" chỉ thị phản ứng chỉ ra rằng phản ứng là được xem xét cũ sau tuổi của nó lớn hơn số quy định của giây.
Như bạn thấy, không có yêu cầu xác nhận lại. Nếu không có yêu cầu nào cho cùng một tài nguyên cho đến 10 phút sau, sẽ không có bất kỳ xác nhận lại nào cho đến 10 phút sau đó.
Ngoài ra, từ Section 5.2 (tôi nhấn mạnh):
Các "Cache-Control" header field được sử dụng để xác định các chỉ thị cho cache dọc theo chuỗi request/response.
Chỉ bộ nhớ cache chứ không phải tác nhân người dùng.
Mỗi người tham gia trong chuỗi yêu cầu/phản hồi nhận được cùng một phản hồi với cùng tiêu đề Bộ nhớ cache kiểm soát, nhưng người nhận đích của tiêu đề Bộ nhớ cache-Kiểm soát chỉ là bộ đệm. Hãy nhớ rằng, chỉ vì bạn nhận được nó, không có nghĩa là nó là dành cho bạn.
Đối với phần còn lại của kịch bản, đánh giá của bạn là chính xác. tôi sẽ báo giá nó ở đây:
Sau 1 phút và vài giây, đại diện người dùng làm cho một yêu cầu khác, xác định một max-age
1 phút:
...
Từ những gì tôi hiểu, yêu cầu này sẽ bỏ qua bộ nhớ cache của tác nhân người dùng. Tại sao?
Do tại thời điểm yêu cầu, độ tuổi của phản hồi được lưu trữ lớn hơn 60 giây. Rõ ràng là nếu tuổi của một phản ứng được lưu trữ là, 65 giây, nó không thể được sử dụng để đáp ứng một yêu cầu với chỉ thị max-age=60
. Do đó, bộ nhớ cache chỉ tuân theo chỉ thị mà nó nhận được.
Trong thực tế, bất kỳ tiêu chuẩn phù hợp HTTP Cache liệu tích hợp trong trình duyệt hoặc tách được yêu cầu phải tuân theo chỉ thị mà nó nhận được, như đã nêu trong Section 5.2 (nhấn mạnh chữ hoa từ nguồn, không phải của tôi):
Một bộ nhớ cache PHẢI tuân thủ các yêu cầu của các chỉ thị Cache-Control được xác định trong phần này.
Dựa trên những gì bạn đã mô tả, cơ chế lưu bộ nhớ cache tùy chỉnh bạn làm việc có vẻ tuân thủ các tiêu chuẩn. Vì vậy, bổ sung của tôi cho các nhà phát triển, đặc biệt là nếu "tùy chỉnh", bạn có nghĩa là "phát triển trong nhà".
Đây là một câu trả lời tuyệt vời! Tôi đã đơn giản hoá kịch bản nói về User Agent (nhưng tôi có nghĩa là cache của User Agent và tất cả các cache liên quan đến roundtrip); bạn đúng về điều "xác nhận lại", nó nói đúng hơn về phản ứng cũ. – systempuntoout