Saya men-debug masalah dengan Pengalihan Permanen HTTP 301. Setelah tes cepat, tampaknya Safari menghapus cache 301-an saat restart, tetapi Firefox tidak.
Kapan IE, Chrome, Firefox dan Safari menghapus cache 301s mereka?
UPDATE: Sebagai contoh, jika saya ingin mengarahkan example1.com
ke example2.com
, tapi saya sengaja set ke redirect ke example3.com
, itu adalah masalah. Saya dapat memperbaiki kesalahan, tetapi siapa pun yang telah mengunjungi example1.com
sementara itu akan melakukan cache redirect yang salah example3.com
, sehingga mereka tidak akan dapat mencapai salah satu example1.com
atau example2.com
sampai cache mereka dihapus. Setelah diselidiki, saya menemukan bahwa tidak ada Cache-Control
dan Expires
header ditetapkan. Header untuk respons 301 yang salah akan seperti ini:
HTTP/1.1 301 Moved Permanently
Date: Wed, 27 Feb 2013 12:05:53 GMT
Server: Apache/2.2.21 (Unix) DAV/2 PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: http://example3.com/
Content-Type: text/html
Tes saya sendiri menunjukkan bahwa:
- IE7, IE8, Android 2.3.4 tidak melakukan cache sama sekali.
- Firefox 18.0.2, Safari 5.1.7 (pada Windows 7), dan Opera 12.14 semua cache, dan bersihkan cache pada browser restart.
- IE10 dan Chrome 25 cache, tetapi jangan menghapus browser restart, jadi kapan mereka akan menghapus?
Jawaban:
Setidaknya dua browser - Chrome dan Firefox - akan men-cache 301 redirect tanpa tanggal kedaluwarsa .
Artinya, itu akan tetap di-cache selama cache browser dapat menampungnya. Itu akan dihapus dari cache jika Anda menghapus cache secara manual, atau jika entri cache dibersihkan untuk memberikan ruang bagi yang baru.
Anda dapat memverifikasi ini setidaknya di Firefox dengan masuk ke
about:cache
dan menemukannya di bawah cache disk.Saya tidak tahu tentang perilaku browser lain, seperti IE10 / IE11. Namun, mengingat peramban lain melakukan cache secara tidak terbatas, Anda tetap harus mengakomodasi ini.
Di semua browser, termasuk Chrome / Firefox masih mungkin untuk menimpa perilaku default ini menggunakan header, seperti dijelaskan di bawah ini:
Catatan: jawaban ini ditulis pada tahun 2014 dan perilaku browser dapat berubah seiring waktu.
Jika Anda tidak ingin pengalihan di-cache
Caching tidak terbatas ini hanya caching default oleh browser ini jika tidak ada header Kontrol-Cache. Logikanya adalah bahwa Anda menentukan pengalihan "permanen" dan tidak memberi mereka instruksi caching lainnya, sehingga mereka akan memperlakukannya seolah-olah Anda ingin itu di-cache tanpa batas waktu.
Browser masih menghormati header Kontrol-Cache dan Kedaluwarsa seperti dengan respons lainnya, jika ditentukan.
Anda dapat menambahkan tajuk seperti
Cache-Control: max-age=3600
atauExpires: Thu, 01 Dec 2014 16:00:00 GMT
ke pengalihan 301 Anda. Anda bahkan bisa menambahkanCache-Control: no-cache
sehingga tidak akan di-cache secara permanen oleh browser atauCache-Control: no-store
bahkan tidak dapat disimpan dalam penyimpanan sementara oleh browser.Alternatif yang lebih baik menurut saya adalah menggunakan redirect 302 atau 307. Ini tidak menyiratkan ke browser atau cache bahwa mereka adalah pengalihan "permanen" dan karenanya tidak boleh di-cache dalam absennya header Kontrol-Cache.
Bagi saya, sepertinya mengeluarkan 301 redirect tetapi menandainya sebagai non-cacheable bertentangan dengan semangat untuk apa 301 redirect diperuntukkan, meskipun mungkin secara teknis valid. YMMV, dan Anda mungkin menemukan kasus tepi di mana masuk akal untuk pengalihan "permanen" untuk memiliki batas waktu.
Jika sebelumnya Anda mengeluarkan 301 redirect tetapi ingin membatalkannya
Jika orang masih memiliki cache redirect 301 di browser mereka, mereka akan terus dibawa ke halaman target terlepas dari apakah halaman sumber masih memiliki redirect di tempat. Pilihan Anda untuk memperbaiki ini termasuk:
Solusi paling sederhana dan terbaik adalah dengan mengeluarkan 301 redirect kembali.
Peramban akan menyadari bahwa ia diarahkan kembali ke apa yang sebelumnya dianggap sebagai URL yang dinonaktifkan, dan ini akan menyebabkannya mengambil kembali URL itu lagi untuk mengonfirmasi bahwa pengalihan yang lama belum ada.
Sunting: beberapa komentar meragukan hal ini, lihat di bawah.
Jika Anda tidak memiliki kendali atas situs tempat target pengalihan sebelumnya, maka Anda tidak beruntung. Coba dan minta pemilik situs untuk mengarahkan kembali kepada Anda.
Juga pencegahan lebih baik daripada mengobati - hindari pengalihan 301 jika Anda tidak yakin ingin secara permanen menghapus URL yang lama.
sumber
http://www.SOMEHOST.com
kehttps://www.SOMEHOST.com
. Tetapi sekaranghttp://www.SOMEHOST.com
harus menjadi host utama untuk situs. Jadi, redirect dari https ke http dihapus. Seperti yang Anda tunjukkan, saya melakukan pengalihan 301 darihttps://www.SOMEHOST.com
kehttp://www.SOMEHOST.com
, tetapi lihat loop. Browser tidak mengambil ulang ...Dari Chrome 71
Untuk menghapus redirect permanen, buka chrome: // settings / clearBrowserData dan dari sana hanya membersihkan "gambar dan file yang di-cache" menghapus redirect.
Chrome 48-70
Buka chrome: // net-internal. Di sebelah kanan bilah status merah atas, klik panah bawah ▼ untuk membuka menu tarik-turun, dan di bawah grup "Alat", pilih "Kosongkan cache".
Pada versi 48, ini adalah satu-satunya hal yang berhasil bagi saya untuk menghapus 301 yang di-cache.
sumber
Sebuah jawaban yang membantu mereka yang sangat ingin menyingkirkan cache redirect:
Chrome cache 301 redirect tanpa batas (dalam cache disk lokal). Untuk menghapus cache ini:
F12
)F5
)Ketika semuanya baik-baik saja, Anda dapat menghapus centang "Nonaktifkan cache" dan semuanya akan terus berfungsi seperti yang diharapkan.
sumber
localhost:8000
kelocalhost
(port 80). Saya juga membersihkan seluruh data situs / aplikasi dari localhost dan localhost: 8000, tetapi tidak ada yang membantu.Buat pengguna mengirimkan formulir posting pada url itu dan pengalihan cache telah hilang :)
sumber
301
adalah respons yang dapat di-cache per HTTP RFC dan browser akan menyimpannya tergantung pada header cache HTTP yang Anda miliki pada respons. Gunakan FireBug atau Charles untuk memeriksa header respons untuk mengetahui durasi pasti respons yang akan di-cache.Jika Anda ingin mengontrol durasi caching, Anda dapat menggunakan header respons HTTP
Cache-Control
danExpires
melakukan hal yang sama. Atau, jika Anda tidak ingin menembaki301
respons sama sekali, gunakan tajuk berikut.sumber
Ada cara yang sangat sederhana untuk menghapus cache browser untuk pengalihan http misalnya 301, 307 dll.
Anda dapat membuka panel jaringan di konsol pengembang di chrome. Pilih panggilan jaringan. Klik kanan padanya dan kemudian klik Hapus Browser Cache untuk menghapus pengalihan cache.
sumber
Dikonfirmasi !! membuat pengguna mengirimkan permintaan posting ke url yang terpengaruh dan pengalihan cache dilupakan.
Kemenangan cepat adalah memasukkan ini di konsol browser jika Anda dapat:
fetch('example.com/affected/link', {method: 'post'}).then(() => {})
Berguna jika Anda mengetahui browser yang terpengaruh (terutama selama pengembangan).
Atau , jika Anda memiliki akses ke halaman redirect 301 sebelumnya, maka Anda dapat menambahkan skrip ini ke halaman dan kapan pun dikunjungi, 301 yang di-cache akan dilupakan.
sumber
Saya akan memposting jawaban yang membantu saya:
buka url:
seharusnya memunculkan popup dan kemudian ..
cached images and files
.from beginning
sumber
sebagai jawaban dari @thomasrutter
Sebenarnya, ini berarti:
a.com 301 hingga b.com
hapus a.com's 301
tambahkan b.com 301 ke a.com
Lalu berhasil.
sumber
a.com
301 -> b.com) (hapusa.com
301) (tambahkana.com/abcdefg
301 ->a.com
) dan paksakan klien untuk melihatnyaa.com/abcdefg
?Saya punya solusi sederhana yang berfungsi pada semua browser utama (versi terbaru), termasuk IE, Chrome dan FF
sumber
Untuk tujuan pengujian (untuk menghindari pengalihan cache), orang dapat membuka WINDOW PRIVATE BARU : klik
CTRL+SHIFT+
N
[jika Anda menggunakan Mozilla, gunakanP
]sumber
Uji pengalihan Anda menggunakan mode penyamaran / InPrivate sehingga ketika Anda menutup peramban itu akan membersihkan cache itu dan membuka kembali jendela tidak akan mengandung cache.
sumber
Seperti yang ditunjukkan oleh jawaban lainnya. Caching mungkin tidak terbatas di browser. Ini sangat berbahaya. Jadi jangan lakukan itu. Setidaknya tambahkan header cache. Dalam htaccess saya selalu melakukannya dengan cara ini sekarang caching sama sekali:
sumber
Untuk mengatasi masalah alamat localhost, saya mengubah nomor port situs yang digunakan. Ini bekerja pada Chrome versi 73.0.3683.86.
sumber
Pada Google Chrome Versi 79 terbaru, Anda dapat menggunakan chrome: // net-internal dan pilih pada DNS dari panel kiri, lalu ketuk tombol Bersihkan cache host
sumber