Rumah >hujung hadapan web >tutorial js >Mengapa iOS 6 Safari Cache $.ajax POST Permintaan Walaupun Cache Ditetapkan kepada Palsu?

Mengapa iOS 6 Safari Cache $.ajax POST Permintaan Walaupun Cache Ditetapkan kepada Palsu?

Susan Sarandon
Susan Sarandonasal
2024-11-03 09:23:30236semak imbas

Why Does iOS 6 Safari Cache $.ajax POST Requests Even When Cache is Set to False?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn