Đối với câu hỏi cuối cùng của bạn, tại sao? Tôi sẽ cố gắng giải thích với những gì tôi biết
Một lời giải thích ngắn gọn về ba mã trạng thái trong các điều khoản của giáo dân.
- 200 - thành công (yêu cầu trình duyệt và nhận tệp từ máy chủ)
Nếu bộ nhớ đệm được kích hoạt trong máy chủ
- 200 (từ bộ nhớ cache) - tệp được tìm thấy trong trình duyệt, vì vậy trình duyệt sẽ không yêu cầu từ máy chủ
- 304 - trình duyệt yêu cầu một tệp nhưng nó bị máy chủ từ chối
Đối với một số tệp, trình duyệt đang quyết định yêu cầu từ máy chủ và đối với một số tệp, nó quyết định đọc từ các tệp được lưu trữ (lưu trữ). Tại sao lại thế này? Mỗi tệp có thời hạn sử dụng, vì vậy
Nếu một tệp chưa hết hạn thì trình duyệt sẽ sử dụng từ bộ đệm (200 bộ đệm).
Nếu tệp hết hạn, trình duyệt yêu cầu máy chủ cho một tệp. Máy chủ kiểm tra tệp ở cả hai nơi (trình duyệt và máy chủ). Nếu cùng một tập tin được tìm thấy, máy chủ từ chối yêu cầu. Theo trình duyệt giao thức sử dụng tập tin hiện có.
nhìn vào cấu hình nginx này
location / {
add_header Cache-Control must-revalidate;
expires 60;
etag on;
...
}
Ở đây thời hạn sử dụng được đặt thành 60 giây, vì vậy tất cả các tệp tĩnh được lưu trong 60 giây. Vì vậy, nếu bạn yêu cầu một tệp một lần nữa trong vòng 60 giây, trình duyệt sẽ đọc từ bộ nhớ (200 bộ nhớ). Nếu bạn yêu cầu sau 60 giây trình duyệt sẽ yêu cầu máy chủ (304).
Tôi giả sử rằng tệp không bị thay đổi sau 60 giây, trong trường hợp đó bạn sẽ nhận được 200 (tức là tệp cập nhật sẽ được tìm nạp từ máy chủ).
Vì vậy, nếu các máy chủ được cấu hình với các tiêu đề (chính sách) hết hạn và bộ nhớ đệm khác nhau, trạng thái có thể khác nhau.
Trong trường hợp của bạn, bạn đang sử dụng cdn, mục đích chính của cdn là tính sẵn sàng cao và giao hàng nhanh. Do đó, họ sử dụng nhiều máy chủ. Mặc dù có vẻ như các tệp nằm trong cùng một thư mục, cdn có thể sử dụng nhiều máy chủ để cung cấp nội dung u, nếu các máy chủ đó có cấu hình khác nhau. Sau đó, những trạng thái có thể thay đổi. Hy vọng nó giúp.