Mam stronę, do której można uzyskać dostęp za pośrednictwem adresu URL/produktów. Gdy odwiedzam ją w przeglądarce, odpowiada ona całą stroną w układzie. Oto uproszczony przykład żądanie nagłówków i treści odpowiedzi:Przeglądarka nie rozróżnia częściowego kodu HTML uzyskanego za pośrednictwem AJAX i pełnej strony.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
<layout>
<products />
</layout>
Gdy użytkownik wykonuje pewne przeszukać rezultaty javascript via AJAX. Wyniki te są świadczone bez układu, ponieważ potrzeba czasu do renderowania i nie trzeba go tak czy owak:
Accept: */*;q=0.5, text/javascript, application/javascript, application/ecmascript, application/x-ecmascript
X-Requested-With: XMLHttpRequest
<products />
Tak, to działało w porządku, dopóki nie dodał buforowanie Cache-Control: private, max-age=3600
. Początkowo chciałem dodać nagłówek Vary: X-Requested-With
, a przeglądarka rozróżniłaby dwie odpowiedzi. Jednak gdy otrzymam/produkty za pośrednictwem AJAX, a następnie odwiedzę/produkty w przeglądarce, wyświetli się częściowa odpowiedź AJAX.
Czy istnieje prosty sposób rozwiązania tego problemu?
P.S. Używam Ruby on Rails i jQuery, jeśli to ma znaczenie.
Czy próbowałeś 'Vary: Accept'? – regilero
Tak, to też nie działa. Myślę, że przeglądarka prawidłowo buforuje obie odpowiedzi. Ale z powodu Content-Type: text/html traktuje je jednakowo i pokazuje ostatni, który jest częściowy. –
Właściwie próbowałem odpowiedzieć JSONEM, a teraz pokazuje JSON. Więc nie zależy to od typu zawartości: text/html. Jestem zaskoczony, że "Vary" nie ma tutaj żadnego efektu. –