按下后退时,Chrome会使用ajax缓存版本

时间:2016-01-14 13:15:40

标签: ajax

我在推送历史状态旁边使用ajax请求来加载新内容并更新整个页面。在服务器上,X-Requested-With标头用于决定发送整页还是仅发送内容。但似乎chrome倾向于使用缓存,无论它是否加载了ajax或普通请求(它在检查缓存时都不会尊重标头)。

当我打开网站页面时,我会点击链接导航到使用ajax的新页面然后通过在地址栏中输入网址导航到新页面。当我回击时,显示ajax缓存版本(无论是html或json),而不是整页。当缓存被禁用时,一切正常。

在检查缓存时,有没有办法强制chrome尊重请求标头?

2 个答案:

答案 0 :(得分:1)

经过一番研究后,我发现浏览器倾向于根据Request Method和URL缓存响应。因此,默认情况下,在检查缓存时,他们不会考虑任何请求标头。但是,当使用Vary标头检查缓存时,可以强制浏览器遵守某些标头。

因此,通过将此标头( Vary:X-Requested-With )添加到基于X-Requested-With请求标头更改的每个响应,服务器告诉浏览器,如果您的响应可能会有所不同X-Requested-With标题已更改,您必须请求新的响应。

答案 1 :(得分:0)

请问,在这样的情况下如何做到这一点:

$(document).ready(function(){

    $(document).on('click','.pagination a',function(e){
        e.preventDefault();
        var pageNumber = $(this).attr('href').split('page=')[1];
        getMorePage(pageNumber)
    });

    function getMorePage(page) {
        $.ajax({
            url: "/all-products-ajax/"+"?page="+page,
            type: "get",
            datatype: "html"
        }).done(function (data) {
            $('#product-view').html(data); 
        }).fail(function () {
            alert('Posts could not be loaded.');
        });
    }
});