Ubuntu -> Apache -> Penumpang Phusion -> Rails 2.3
Bagian utama situs saya bereaksi terhadap klik Anda. Jadi, jika Anda mengeklik tautan, tautan itu akan mengirim Anda ke tujuan, dan segera membuat kembali halaman Anda.
Tetapi, jika Anda menekan tombol kembali, Anda tidak melihat halaman baru. Sayangnya, itu tidak muncul tanpa penyegaran manual; tampaknya browser sedang menyimpannya. Saya ingin memastikan browser tidak men-cache halaman.
Secara terpisah, saya tidak ingin mengatur tanggal kadaluarsa jauh-masa depan untuk semua aset statis saya.
Apa cara terbaik untuk menyelesaikan ini? Haruskah saya menyelesaikan ini di Rails? Apache? Javascript?
Terima kasih atas semua bantuan Anda, Jason
Sayang. Tidak satu pun dari saran ini yang memaksa perilaku yang saya cari.
Mungkin ada jawaban javascript? Saya bisa meminta rails menuliskan stempel waktu dalam komentar, kemudian periksa javascript untuk melihat apakah waktunya dalam lima detik (atau apa pun yang berfungsi). Jika ya, baik-baik saja, tetapi jika tidak, muat ulang halaman?
Apakah Anda pikir ini akan berhasil?
Terima kasih atas seluruh bantuan Anda,
Jason
sumber
Cache-Control: no-store
selama peramban ini sesuai dengan HTTP 1.1. Bagian 14.9.2 Apa yang Mungkin Disimpan olehmenggunakan:
http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-expires_now
sumber
expires_now
hanya mengirimno-cache
tajuk. Tergantung pada browser ini mungkin tidak cukup. (Misalnya Firefox menginginkanno-store
koneksi non-HTTPS: developer.mozilla.org/en/docs/Using_Firefox_1.5_caching )no-store
juga diperlukan.Saya telah menggunakan baris ini dengan beberapa keberhasilan di controller. Ini bekerja di Safari dan Internet Explorer tetapi saya belum melihatnya bekerja dengan Firefox.
Untuk poin kedua Anda, jika Anda menggunakan metode pembantu rel seperti
dan biarkan pengaturan default di server web Anda, aset biasanya di-cache cukup baik.
sumber
1.year.ago
adalah overhead yang tidak perlu.Fri, 01 Jan 1990 00:00:00 GMT
Cara bersih adalah dengan menulis middleware Rack, yang mengubah header Cache-Control berdasarkan pada beberapa logika (misalnya, hanya untuk aplikasi / tipe mime xml). Atau, untuk pendekatan yang lebih buruk, tetapi masih berfungsi, seseorang dapat mengubah ActionDispatch :: Response :: DEFAULT_CACHE_CONTROL konstan menjadi 'no-cache'. Tentu saja, jika granularity controller dan / atau action diperlukan, maka lebih baik melakukannya di controller.
sumber
Catatan: Anda tidak dapat menghapus cache secara kondisional (seperti jika
before_filter
hanya memanggilreset_cache
jika pengguna sudah ada di sana). Anda perlu menghapus cache tanpa syarat , karena browser tidak akan membuat permintaan baru hanya untuk melihat apakah kali ini, perlu memuat ulang, meskipun itu tidak perlu terakhir kali.Contoh:
tidak akan berfungsi untuk mencegah pengguna kembali setelah mereka berada di sana, karena browser menggunakan header cache asli pada tombol Kembali.
akan bekerja, namun (setelah me-refresh halaman dan membersihkan cache dari sebelum Anda menambahkan ini, jelas), karena, pada permintaan pertama, browser akan mendapatkan
no-cache, no-store, ...
dan menerapkannya untuk memuat halaman berikutnya.sumber
no_cache_control
PermataJika Anda perlu melakukan ini untuk semua respons, misalnya untuk lulus tes penetrasi (BURP, Detectify, dll.), Anda dapat menginstal Permata ini di Rails 4+ untuk menambahkan header berikut ke semua respons:
Bekerja seperti pesona dan benar-benar cara yang tepat untuk aplikasi web HTTPS yang aman dan memerlukan otentikasi untuk melakukan apa saja.
sumber