Permintaan apa yang dihasilkan oleh peramban “F5” dan “Ctrl + F5"?

394

Apakah ada standar untuk tindakan F5dan Ctrl + F5pemicu apa di browser web?

Saya pernah melakukan percobaan di IE6 dan Firefox 2.x. The F5 penyegaran akan memicu permintaan HTTP yang dikirim ke server dengan If-Modified-Sincesundulan, sementara Ctrl + F5tidak akan memiliki sundulan tersebut. Dalam pemahaman saya, F5 akan mencoba untuk memanfaatkan konten yang di-cache sebanyak mungkin, sementara Ctrl + F5 itu dimaksudkan untuk meninggalkan semua konten yang di-cache dan hanya mengambil semua konten dari server lagi.

Tapi hari ini, saya perhatikan bahwa di beberapa browser terbaru (Chrome, IE8) tidak berfungsi dengan cara ini lagi. Keduanya F5dan Ctrl + F5kirim If-Modified-Sincetajuk.

Jadi bagaimana ini seharusnya bekerja, atau (jika tidak ada standar) bagaimana perbedaan browser utama dalam bagaimana mereka mengimplementasikan fitur-fitur refresh ini?

Morgan Cheng
sumber
10
FWIW: sementara ini tentu saja bisa menjadi topik Pengguna Super, dan bahkan mungkin dimaksudkan sebagai fokus pengguna akhir ketika diminta, pada titik ini telah dijawab dan dirujuk oleh programmer dan pengembang web dan mungkin harus ditinggalkan di sini . SU memiliki beberapa versi lain yang lebih berorientasi pengguna akhir, dan tidak memerlukannya ...
Shog9
2
xkcd.com/1854
sudo bangbang

Jawaban:

313

Secara umum:

F5dapat memberi Anda halaman yang sama bahkan jika kontennya diubah, karena mungkin memuat halaman dari cache. Tetapi Ctrl- F5memaksa penyegaran cache, dan akan menjamin bahwa jika konten diubah, Anda akan mendapatkan konten baru.

dancavallaro
sumber
86
Ini akurat, tetapi perhatikan bahwa walaupun Ctrl + F5 akan menyebabkan browser membuang cache dan meminta yang baru dari server, server dapat mengabaikan header no-cache dan melayani halaman cache di sisi server. Dengan demikian bahkan Ctrl + F5 dapat mengembalikan versi halaman yang lama jika server mengabaikan header no-cache.
AaronLS
F5 akan me-refresh halaman - CTRL + F5 akan melakukan refresh 'keras'.
Dimitri Dewaele
Juga menyebutkan, bahwa Ctrl-F5 akan mengirimkan formulir, jika diberikan.
jawo
Ok, jadi jika Anda menekan ctrl + f5 Anda memberi tahu browser Anda untuk tidak menggunakan cache, tetapi apa yang terjadi dalam permintaan berikutnya ke halaman yang sama? Maksud saya, dapatkah Anda melihat versi halaman yang lebih lama setelah Anda melihat yang tertua? Jika saya melihat versi 1 halaman karena di-cache tetapi sudah ada versi 2, saya mengerti bahwa menekan ctrl + f5 akan membuat saya melihat versi2. Lalu saya menutup browser saya dan membuka halaman itu lagi, ¿apakah saya melihat versi 1 atau saya masih melihat versi2? Terima kasih.
molerus
525

Terserah browser tetapi mereka berperilaku dengan cara yang sama.

Saya telah menguji FF, IE7, Opera dan Chrome.

F5biasanya memperbarui halaman hanya jika itu diubah. Browser biasanya mencoba menggunakan semua jenis cache sebanyak mungkin dan menambahkan header "If-modified-since" ke permintaan. Opera berbeda dengan mengirim "Cache-Control: no-cache".

CTRL- F5digunakan untuk memaksa pembaruan, mengabaikan cache apa pun. IE7 menambahkan "Cache-Control: no-cache", seperti halnya FF, yang juga menambahkan "Pragma: no-cache". Chrome melakukan normal "Jika-dimodifikasi-sejak" dan Opera mengabaikan kunci.

Jika saya ingat dengan benar itu adalah Netscape yang merupakan browser pertama yang menambahkan dukungan untuk kontrol cache dengan menambahkan "Pragma: No-cache" ketika Anda menekan CTRL- F5.

Edit: Tabel yang diperbarui

Tabel di bawah ini diperbarui dengan informasi tentang apa yang akan terjadi ketika tombol refresh browser diklik (setelah permintaan oleh Joel Coehoorn ), dan header "max-age = 0" Cache-control-header.

Tabel diperbarui, 27 September 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│- │                                │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘

Versi yang diuji:

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

Catatan:

  1. Versi 3.0.6 mengirimkan I dan C, tetapi 3.1.6 membuka halaman di tab baru, membuat permintaan normal hanya dengan "I".

  2. Versi 10.62 tidak melakukan apa-apa. 9.61 mungkin melakukan C kecuali itu salah ketik di tabel lama saya.

Catatan tentang Chrome 6.0.472 : Jika Anda melakukan reload paksa (seperti CTRL- F5) berperilaku seperti url ditandai secara internal untuk selalu melakukan reload paksa. Bendera dihapus jika Anda pergi ke bilah alamat dan tekan enter.

beberapa
sumber
5
@ Joel Coehoorn: Memperbarui tabel dengan mengklik tombol refresh. Harus menyukai tabel grafik ASCII, bukan? Pengodean warna hanyalah efek samping dari kode pengodean warna.
Beberapa
11
Tidak bisakah Anda melakukannya sebagai tabel HTML yang tepat?
John Topley
13
FYI - jawaban ini sebenarnya telah direferensikan di papan pengembangan / pelacakan bug chrome: code.google.com/p/chromium/issues/detail?id=1906
Kip
18
@ John Topley: Tabel tidak diizinkan, jadi jawabannya tidak.
sekitar
1
Kerja bagus di tabel ini - ini milik quirksmode. +1. Saya ingin tahu apakah ada juga variasi dalam tajuk apa yang digunakan untuk meminta sumber daya di dalam laman yang disegarkan, seperti gambar, stylesheet, dll ...
James Hart
68

Saya telah menerapkan halaman yang kompatibel lintas browser untuk menguji perilaku refresh browser (di sini adalah kode sumber ) dan mendapatkan hasil yang mirip dengan @beberapa, tetapi untuk browser modern:

masukkan deskripsi gambar di sini

Pavel Podlipensky
sumber
Tautan pada halaman Anda rusak, saya memperbaiki tautan pada jawabannya, tetapi banyak tautan dari halaman itu rusak. podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/…
Juan Mendes
Maaf, tentang itu - melakukan migrasi blog. Tautan akan diperbaiki secepatnya, untuk saat ini - silakan buka repositori github dan unduh contoh.
Pavel Podlipensky
Tautannya masih terputus. Migrasi belum selesai?
bernardn
Bisakah Anda memperbarui jawaban Anda dengan versi browser saat ini, terutama Safari seluler dan desktop, @PavelPodlipensky?
Greg Dubicki
9

Setidaknya di Firefox (v3.5), cache tampaknya dinonaktifkan daripada hanya dibersihkan. Jika ada beberapa contoh dari gambar yang sama pada suatu halaman, itu akan ditransfer beberapa kali. Itu juga merupakan kasus untuk imgtag yang ditambahkan kemudian melalui Ajax / JavaScript.

Jadi jika Anda bertanya-tanya mengapa browser terus mengunduh ikon kecil yang sama beberapa ratus kali di situs Ajax auto-refresh Anda, itu karena Anda awalnya memuat halaman menggunakan CTRL- F5.

mermshaus
sumber
3

IE7 / 8/9 tampaknya berperilaku berbeda tergantung pada apakah halaman tersebut memiliki fokus atau tidak.

Jika Anda mengklik pada halaman dan CTRL+ F5maka "Kontrol Cache: no-cache" termasuk dalam header permintaan. Jika Anda mengklik di bilah Lokasi / Alamat kemudian tekan CTRL+ F5bukan.

Phil Haselden
sumber
1

Ketika pengguna menekan F5meskipun permintaan baru masuk ke server web dan mendapatkan respons untuk permintaan itu juga. Tetapi ketika header respons diurirkan, periksa informasi yang diperlukan dalam cache browser. Jika informasi yang diperlukan dalam cache belum kedaluwarsa maka informasi itu dikembalikan dari dalam cache itu sendiri.

Ketika pengguna mengklik CTRL- F5bahkan kemudian permintaan baru pergi ke server web dan mendapatkan respons. Tapi kali ini ketika header respons diurangkan, ia tidak memeriksa informasi yang diperlukan dalam cache, dan hanya membawa semua server formulir informasi yang diperbarui.

naXa
sumber