iOS 6 Safari Caching $.ajax POST Requests
Sejak keluaran iOS 6, pengguna telah melaporkan tingkah laku caching yang tidak dijangka apabila membuat $ .ajax POST permintaan dalam paparan web Safari. Walaupun menetapkan pilihan cache kepada palsu, Safari secara berterusan menyimpan cache respons.
Sebab
Mekanisme caching agresif Safari secara khusus menyasarkan permintaan POST yang mempamerkan tandatangan fungsi statik, di mana input parameter kekal malar dan hanya data yang dikembalikan berbeza-beza. Secara lalai, Safari menganggap permintaan tersebut sebagai boleh cache dan menyimpan responsnya untuk mendapatkan semula masa hadapan.
Penyelesaian
Untuk memintas isu caching ini, ubah suai tandatangan fungsi untuk memperkenalkan dinamik parameter. Contohnya, bukannya:
getNewRecordID(intRecordType)
Gunakan:
getNewRecordID(intRecordType, strTimestamp)
Dengan memasukkan cap masa atau parameter dinamik lain ke dalam tandatangan fungsi, Safari mengiktiraf permintaan itu sebagai unik dan mengelak daripada menyimpan hasil carian. .
Dasar Sebab
Gelagat cache Safari berpunca daripada tafsiran spesifikasi HTTP, yang membenarkan caching respons POST apabila pengepala Cache-Control atau Expires yang sesuai disertakan. Walau bagaimanapun, pelaksanaan Apple memanjangkan caching ini kepada senario di mana pengepala ini tidak hadir atau ditetapkan kepada "max-age=0."
No Cache-Control or Expires headers = iOS6 Safari will cache Cache-Control max-age=0 and an immediate Expires = iOS6 Safari will cache Cache-Control: no-cache = iOS6 Safari will NOT cache
Penyelesaian
Untuk melumpuhkan caching secara global untuk semua permintaan POST, tambahkan baris berikut pada Apache konfigurasi:
Header set Cache-Control "no-cache"
Sebagai alternatif, anda boleh mengehadkan tingkah laku ini khusus kepada permintaan POST:
SetEnvIf Request_Method "POST" IS_POST Header set Cache-Control "no-cache" env=IS_POST
Dengan mengubah suai tandatangan fungsi dan memasukkan pengubahsuaian caching ini, anda boleh memulihkan tingkah laku yang dijangkakan dalam iOS 6 Safari dan pastikan permintaan POST tidak dicache.
Atas ialah kandungan terperinci Mengapa iOS 6 Safari Cache $.ajax POST Permintaan Walaupun Cache Ditetapkan kepada Palsu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!