Những yêu cầu nào làm cho các trình duyệt F5 F5 và các Ctrl + F5 của trình duyệt tạo ra?


394

Có một tiêu chuẩn cho những hành động F5Ctrl + F5kích hoạt trong trình duyệt web?

Tôi đã từng thử nghiệm trong IE6 và Firefox 2.x. Việc F5 làm mới sẽ kích hoạt một yêu cầu HTTP được gửi đến máy chủ bằng một If-Modified-Sincetiêu đề, trong khi Ctrl + F5sẽ không có tiêu đề như vậy. Theo hiểu biết của tôi, F5 sẽ cố gắng sử dụng nội dung được lưu trong bộ nhớ cache càng nhiều càng tốt, trong khi Ctrl + F5 dự định từ bỏ tất cả nội dung được lưu trong bộ nhớ cache và chỉ lấy lại tất cả nội dung từ máy chủ.

Nhưng hôm nay, tôi nhận thấy rằng trong một số trình duyệt mới nhất (Chrome, IE8), nó không còn hoạt động theo cách này nữa. Cả hai F5Ctrl + F5gửi If-Modified-Sincetiêu đề.

Vậy làm thế nào để nó hoạt động, hoặc (nếu không có tiêu chuẩn) làm thế nào để các trình duyệt chính khác nhau về cách chúng thực hiện các tính năng làm mới này?


10
FWIW: mặc dù đây chắc chắn có thể là một chủ đề Siêu người dùng và thậm chí có thể được dự định là phần nào tập trung vào người dùng cuối khi được hỏi, tại thời điểm này, nó đã được trả lời và tham khảo bởi các lập trình viên và nhà phát triển web và có lẽ nên để lại ở đây . SU đã có một số phiên bản khác, hướng đến người dùng cuối nhiều hơn về điều này và không cần nó ...
Shog9

Câu trả lời:


313

Nói chung:

F5có thể cung cấp cho bạn cùng một trang ngay cả khi nội dung bị thay đổi, vì nó có thể tải trang từ bộ đệm. Nhưng Ctrl- F5buộc phải làm mới bộ đệm và sẽ đảm bảo rằng nếu nội dung được thay đổi, bạn sẽ nhận được nội dung mới.


86
Thi là chính xác, nhưng lưu ý rằng trong khi Ctrl + F5 sẽ khiến trình duyệt loại bỏ bộ đệm và yêu cầu mới từ máy chủ, máy chủ có thể bỏ qua tiêu đề không có bộ đệm và phục vụ trang lưu trữ phía máy chủ. Do đó, ngay cả Ctrl + F5 cũng có thể trả về phiên bản cũ của trang nếu máy chủ bỏ qua tiêu đề không có bộ đệm.
AaronLS

F5 sẽ làm mới trang - CTRL + F5 sẽ làm mới 'cứng'.
Dimitri Dewaele

Cũng đề cập, Ctrl-F5 sẽ gửi biểu mẫu, nếu được cung cấp.
jawo

Ok, vậy nếu bạn nhấn ctrl + f5, bạn bảo trình duyệt của mình không sử dụng bộ đệm của nó, nhưng điều gì xảy ra trong các yêu cầu tiếp theo đến cùng một trang? Ý tôi là, bạn có thể xem các phiên bản cũ hơn của trang sau khi bạn nhìn thấy phiên bản cũ nhất không? Nếu tôi thấy phiên bản 1 của trang vì bộ nhớ cache của nó nhưng đã có sẵn phiên bản 2, tôi hiểu rằng việc nhấn ctrl + f5 sẽ khiến tôi thấy phiên bản 2. Sau đó, tôi đóng trình duyệt của mình và mở lại trang đó, tôi có thấy phiên bản 1 hay tôi vẫn thấy phiên bản 2? Cảm ơn.
molerus

525

Nó tùy thuộc vào trình duyệt nhưng họ hành xử theo những cách tương tự.

Tôi đã thử nghiệm FF, IE7, Opera và Chrome.

F5thường chỉ cập nhật trang nếu nó được sửa đổi. Trình duyệt thường cố gắng sử dụng tất cả các loại bộ đệm càng nhiều càng tốt và thêm tiêu đề "Nếu được sửa đổi từ khi" vào yêu cầu. Opera khác biệt bằng cách gửi "Kiểm soát bộ đệm: không có bộ đệm".

CTRL- F5được sử dụng để buộc cập nhật, bỏ qua mọi bộ đệm. IE7 thêm "Kiểm soát bộ đệm: không có bộ đệm", cũng như FF, cũng bổ sung "Thực dụng: không có bộ đệm". Chrome thực hiện "Nếu được sửa đổi" thông thường và Opera bỏ qua khóa.

Nếu tôi nhớ chính xác thì đó là Netscape, trình duyệt đầu tiên hỗ trợ kiểm soát bộ đệm bằng cách thêm "Thực tế: Không có bộ đệm" khi bạn nhấn CTRL- F5.

Chỉnh sửa: Bảng cập nhật

Bảng bên dưới được cập nhật thông tin về những gì sẽ xảy ra khi nhấp vào nút làm mới của trình duyệt (sau khi yêu cầu của Joel Coehoorn ) và tiêu đề "max-age = 0" Cache-control.

Bảng cập nhật, ngày 27 tháng 9 năm 2010

┌────────────┬───────────────────────────────────────────────┐
│  UPDATED   │                Firefox 3.x                    │
│27 SEP 2010 │  ┌────────────────────────────────────────────┤
│            │  │             MSIE 8, 7                      │
│ Version 3  │  │  ┌─────────────────────────────────────────┤
│            │  │  │          Chrome 6.0                     │
│            │  │  │  ┌──────────────────────────────────────┤
│            │  │  │  │       Chrome 1.0                     │
│            │  │  │  │  ┌───────────────────────────────────┤
│            │  │  │  │  │    Opera 10, 9                    │
│            │  │  │  │  │  ┌────────────────────────────────┤
│            │  │  │  │  │  │                                │
├────────────┼──┼──┼──┼──┼──┼────────────────────────────────┤
│          F5│IM│I │IM│IM│C │                                │
│    SHIFT-F5│- │- │CP│IM│- │ Legend:                        │
│     CTRL-F5│CP│C │CP│IM│- │ I = "If-Modified-Since"        │
│      ALT-F5│- │- │- │- │*2│ P = "Pragma: No-cache"         │
│    ALTGR-F5│- │I │- │- │- │ C = "Cache-Control: no-cache"  │
├────────────┼──┼──┼──┼──┼──┤ M = "Cache-Control: max-age=0" │
│      CTRL-R│IM│I │IM│IM│C │ - = ignored                    │
│CTRL-SHIFT-R│CP│- │CP│- │- │                                │
├────────────┼──┼──┼──┼──┼──┤                                │
│       Click│IM│I │IM│IM│C │ With 'click' I refer to a      │
│ Shift-Click│CP│I │CP│IM│C │ mouse click on the browsers    │
│  Ctrl-Click│*1│C │CP│IM│C │ refresh-icon.                  │
│   Alt-Click│IM│I │IM│IM│C │                                │
│ AltGr-Click│IM│I │- │IM│- │                                │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘

Các phiên bản đã thử nghiệm:

  • Firefox 3.1.6 và 3.0.6 (WINXP)
  • MSIE 8.0.6001 và 7.0.5730.11 (WINXP)
  • Chrome 6.0.472.63 và 1.0.151.48 (WINXP)
  • Opera 10.62 và 9.61 (WINXP)

Ghi chú:

  1. Phiên bản 3.0.6 gửi I và C, nhưng 3.1.6 mở trang trong một tab mới, thực hiện một yêu cầu bình thường chỉ với "I".

  2. Phiên bản 10.62 không làm gì cả. 9.61 có thể làm C trừ khi đó là một lỗi đánh máy trong bảng cũ của tôi.

Lưu ý về Chrome 6.0.472 : Nếu bạn thực hiện tải lại bắt buộc (như CTRL- F5), nó hoạt động giống như url được đánh dấu bên trong để luôn thực hiện tải lại bắt buộc. Cờ sẽ bị xóa nếu bạn đi đến thanh địa chỉ và nhấn enter.


5
@Joel Coehoorn: Cập nhật bảng với nhấp vào nút refresh. Phải yêu bảng đồ họa ASCII, phải không? Mã màu chỉ là một hiệu ứng phụ của mã màu.
một số

11
Bạn không thể làm điều đó như một bảng HTML thích hợp?
John Topley

13
FYI - câu trả lời này thực sự đã được tham khảo trên bảng theo dõi lỗi / phát triển chrome: code.google.com/p/chromium/issues/detail?id=1906
Kip

18
@ John Topley: Bàn không được phép, vì vậy câu trả lời là không.
một số

1
Công việc tuyệt vời trên bảng này - điều này thuộc về quirksmode. +1. Tôi tự hỏi liệu có biến thể trong tiêu đề nào được sử dụng để yêu cầu tài nguyên trong trang được làm mới, chẳng hạn như hình ảnh, biểu định kiểu, v.v ...
James Hart

68

Tôi đã triển khai trang tương thích với nhiều trình duyệt để kiểm tra hành vi làm mới của trình duyệt (đây là mã nguồn ) và nhận kết quả tương tự như @some, nhưng đối với các trình duyệt hiện đại:

nhập mô tả hình ảnh ở đây


Các liên kết trên trang của bạn bị hỏng, tôi đã sửa liên kết trên câu trả lời, nhưng rất nhiều liên kết từ trang đó bị hỏng. podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/ ích
Juan Mendes

Xin lỗi, về điều đó - làm di chuyển blog. Liên kết sẽ được cố định càng sớm càng tốt - vui lòng truy cập kho lưu trữ github và tải xuống các ví dụ.
Pavel Podlipensky

Các liên kết vẫn bị hỏng. Di cư chưa xong?
bernardn

Bạn có thể vui lòng cập nhật câu trả lời của mình với phiên bản hiện tại của trình duyệt, đặc biệt là Safari trên thiết bị di động và máy tính để bàn, @PavelPodlipensky không?
Greg Dubicki

9

Ít nhất là trong Firefox (v3.5), bộ đệm dường như bị vô hiệu hóa chứ không đơn giản là bị xóa. Nếu có nhiều phiên bản của cùng một hình ảnh trên một trang, nó sẽ được chuyển nhiều lần. Đó cũng là trường hợp cho imgcác thẻ được thêm vào sau đó thông qua Ajax / JavaScript.

Vì vậy, trong trường hợp bạn đang tự hỏi tại sao trình duyệt cứ tải xuống cùng một biểu tượng vài trăm lần trên trang web Ajax tự động làm mới của bạn, thì đó là do ban đầu bạn đã tải trang bằng cách sử dụng CTRL- F5.


3

IE7 / 8/9 dường như hoạt động khác nhau tùy thuộc vào việc trang có tập trung hay không.

Nếu bạn nhấp vào trang và CTRL+ F5thì "Kiểm soát bộ đệm: không có bộ đệm" được bao gồm trong các tiêu đề yêu cầu. Nếu bạn nhấp vào thanh Vị trí / Địa chỉ thì nhấn CTRL+ F5không.


1

Khi người dùng nhấn F5mặc dù yêu cầu mới sẽ đến máy chủ web và nhận được phản hồi cho yêu cầu. Nhưng khi tiêu đề responce được phân tích cú pháp, nó kiểm tra thông tin cần thiết trong bộ đệm của trình duyệt. Nếu thông tin bắt buộc trong bộ đệm chưa hết hạn thì thông tin đó sẽ được khôi phục từ chính bộ đệm.

Khi người dùng nhấp vào CTRL- F5ngay cả khi đó yêu cầu mới sẽ đến máy chủ web và nhận được phản hồi. Nhưng lần này khi tiêu đề thư mục được phân tích cú pháp, nó không kiểm tra bất kỳ thông tin bắt buộc nào trong bộ đệm và chỉ mang tất cả máy chủ biểu mẫu thông tin cập nhật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.