为什么Chrome仍然会缓存此请求?

时间:2015-07-17 23:26:16

标签: google-chrome caching

我有一个页面,其中设置了所有缓存控制功能,然而,Google Chrome会不断将其从缓存中拉出来。我们清空了所有导航历史记录,但在重新加载后,Chrome会再次缓存它:

<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
</head>
<body ng-app="ctrljs">
<?php
                $query2="SELECT * FROM t_un ORDER BY ai DESC";
                $qdb=mysql_query("$query2");
                while($fqdb=mysql_fetch_object($qdb)){
                    echo "<tr bgcolor='".($fqdb->webstatus=="inactive"?"#F6CED8":"#CEF6F5")."' id='white' onclick='swapBG(this)'><td>$no.</td><td>$fqdb->ai</td><td><a href='?namesearch=$fqdb->username&submit=yes'>$fqdb->username</a></td><td nowrap>$fqdb->namealias</td><td nowrap>$fqdb->hu</td><td nowrap><a href='#' data-toggle='modal' data-target='#mlmid'>$fqdb->mlmid</a></td><td>$fqdb->sponsor</td><td>$fqdb->upline</td><td nowrap>$fqdb->city</td><td>$fqdb->email</td><td>$fqdb->hp</td><td>$fqdb->bb</td><td nowrap>$fqdb->it</td><td nowrap><a href='?page=gantive&email=$fqdb->email' onclick=\"return confirm('Are you sure?')\">$fqdb->ve</a></td><td>$fqdb->sub</td></tr>";
?>
                                <div class='modal fade' id='mlmid' tabindex='-1' role='dialog' aria-labelledby='myModalLabel' aria-hidden='true'>
                                  <div class='modal-dialog'>
                                    <div class='modal-content'>
                                      <div class='modal-body'>
                                        <form method='post' action='' name='myForm' ng-controller='formctrl'>
                                            Nomor ID Member C2G: <br>
                                            <input type='text' name='mlmidbaru' ng-model='mlmidbaru' required ng-pattern="/^[A-Za-z0-9]*$/"></input>
                                            <span class='errorcolor' ng-show='myForm.mlmidbaru.$error.pattern'><span class='label label-danger'><span class='glyphicon glyphicon-remove'></span></span> <font color='red'>invalid value</font></span>
                                            <input type='submit' value='submit' ng-hide="!myForm.$valid"></input>
                                        </form>
                                      </div>
                                    </div><!-- /.modal-content -->
                                  </div><!-- /.modal-dialog -->
                                </div><!-- /.modal -->
<?php
                    $no=$no+1;
                }
?>
    <script>
        var app = angular.module('ctrljs', []);
        app.controller('formctrl', function($scope, $http){
             $scope.digits = {};
        });
    </script>
</body>
</html>

我们确实有清漆设置,但正如您从X-Varnish-Cache中看到的,它是一个未命中的。此外,状态代码部分会说明Chrome正在使用缓存。

1 个答案:

答案 0 :(得分:2)

在您的回复标题中,Chrome指出年龄为0,即响应已缓存一秒或更短时间。

如果你等待一秒钟以上或者包含缓存验证器an ETag or a Last-Modified header它可能会有效,它允许浏览器触发重新验证(条件请求)而不是正常的GET请求。

问题可能是must-revalidatemax-age=0不需要):

  

当缓存接收到的响应中存在must-revalidate指令时,该缓存必须在该条目变为陈旧后才能响应后续请求而不首先使用原始服务器重新验证该条目

如果没有ETagLast-Modified标题,则无法进行重新验证。

此外,您可以跳过Expires标题:

  

如果响应包含Expires标头和max-age指令,则max-age指令会覆盖Expires标头,即使Expires标头更具限制性。对于给定的响应,此规则允许源服务器为HTTP / 1.1(或更高版本)缓存提供比HTTP / 1.0缓存更长的到期时间。

来自RFC