J'ai une page qui peut être consulté à URL/produits. Lorsque je le visite dans un navigateur, il répond par une page entière dans une mise en page. Voici un exemple simplifié des en-têtes de demande et le corps de réponse:Navigateur ne distingue pas un HTML partiel obtenu via AJAX et une page complète
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
<layout>
<products />
</layout>
Lorsqu'un utilisateur fait une recherche les résultats des mises à jour via javascript AJAX. Les résultats sont rendus sans mise en page, car il faut du temps pour rendre et je ne ont pas besoin de toute façon:
Accept: */*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript
X-Requested-With: XMLHttpRequest
<products />
Donc, cela a bien fonctionné jusqu'à ce que j'ajouté la mise en cache Cache-Control: private, max-age=3600
. Au départ, je pensais ajouter Vary: X-Requested-With
en-tête et un navigateur distinguerait les deux réponses. Cependant, lorsque j'obtiens des produits via AJAX et que je consulte/products dans le navigateur, il affiche la réponse AJAX partielle.
Existe-t-il un moyen simple de résoudre ce problème?
P.S. J'utilise Ruby on Rails et jQuery si ça compte.
Avez-vous essayé 'Vary: Accepter'? – regilero
Oui, ça ne marche pas aussi. Je pense que le navigateur cache correctement les deux réponses. Mais à cause de Content-Type: text/html il les traite également et montre le dernier qui s'avère être partiel. –
En fait, j'ai essayé de répondre avec JSON, et maintenant il montre JSON. Donc cela ne dépend pas de Content-Type: text/html. Je suis assez surpris que "Vary" n'ait aucun effet ici. –