>网络缓存:网络开发的关键但又古怪的方面。 在您的浏览器和服务器之间是一个复杂的缓存网络,默默地优化了Internet流量。但是,如果不仔细管理,这个系统可能会引起令人困惑的矛盾。
>钥匙要点:
Last-Modified
>,Etag
和Cache-Control
)。 Cache-Control
是至关重要的,提供诸如no-store
,no-cache
,public
,private
和max-age
>。
缓存行为由HTTP状态代码和标题决定。 浏览器/代理将提供缓存的数据,用服务器验证数据新鲜度,或获取新鲜数据。 标题是钥匙:
:Cache-Control
可防止所有缓存;
no-store
>
no-cache
no-store
或no-cache
:Last-Modified
将缓存限制到用户的浏览器中。Etag
public
>
private
public
>示例(php):private
max-age
页面和ajax数据的> 即使使用适当的标题设置,也可能会出现浏览器不一致,尤其是在使用后式按钮时。 Chrome和Edge可能会恢复到初始页面状态,而Firefox和Safari保留了最后一个已知的状态。
考虑一个分页表:header('Cache-Control: private,max-age=30'); echo json_encode($data);
初始页面加载:
res .set('Cache-Control', 'private,max-age=30') .json(data);
ajax导航:URL更改(例如,),但是Ajax更新了DOM。
如果AJAX调用使用相同的URL,则在按下后面按钮时,Chrome/Edge可能会使用缓存的JSON而不是HTML。 解决方案:对页面和AJAX请求使用单独的URL(例如,在Ajax URL中添加
)。这确保了独立的缓存。
http://myapp.com/list/
>
虽然方便开发,但自签名的证书可阻止Chrome(以及其他基于眨眼的浏览器)从缓存页面数据中进行。 这会在本地测试(无缓存)和实时部署(启用缓存)之间造成不一致的不一致。
常见问题(常见问题解答):>
提供的常见问题解答部分在很大程度上保持不变,因为它提供了有关缓存最佳实践和故障排除的有价值的信息。 该内容已经是结构化的,并解决了与缓存JSON响应和整体Web开发策略有关的共同问题。以上是如何解决缓存的难题的详细内容。更多信息请关注PHP中文网其他相关文章!