• http 请求中 缓存 的使用


    (缓存有很多种:

    浏览器端的缓存,

    有服务器端的缓存,

    有代理服务器的缓存,

    有ASP.NET页面缓存,对象缓存。 数据库也有缓存, 等等。

    http中具有缓存功能的是浏览器缓存,以及缓存代理服务器。)

    http缓存的概念:

    当Web请求访问时, 如果本地有“已缓存的”内容,就可以从本地存储设备直接加载并进行访问(而不是从原始服务器中再次耗时耗资源拉取)

    http缓存作用:

    1. 减少了冗余的数据传输,节省了时间和资源

    2. 减少了服务器的负担, 提高了网站的性能

    3. 加快了客户端加载的速度

    比如:现公司使用的客户端,登录时存在每次线上请求进行获取资源,也可选择本地加载,加载运行之前已有的缓存数据,访问速度就很快,但是缺点就是不能及时获取到新的内容,所以是有利有弊的)

    http查看缓存是否保持最新的方式:

    第一种, 浏览器把缓存文件的最后修改时间通过 header ”If-Modified-Since“来告诉Web服务器。

    第二种, 浏览器把缓存文件的ETag, 通过header "If-None-Match", 来告诉Web服务器。

    请求的Header当中缓存的相关解释:

    举例:下面是一个请求header的request和response信息-------------------------------------------------------

    Request
    Cache-Control: max-age=0 以秒为单位 
    If-Modified-Since: Mon, 19 Nov 2012 08:38:01 GMT 缓存文件的最后修改时间。 
    If-None-Match: "0693f67a67cc1:0" 缓存文件的Etag值 
    Cache-Control: no-cache 不使用缓存 
    Pragma: no-cache 不使用缓存 
        
        
    Response
    Cache-Control: public 响应被缓存,并且在多用户间共享,  (公有缓存和私有缓存的区别,请看另一节) 
    Cache-Control: private 响应只能作为私有缓存,不能在用户之间共享 
    Cache-Control:no-cache 提醒浏览器要从服务器提取文档进行验证 
    Cache-Control:no-store 绝对禁止缓存(用于机密,敏感文件) 
    Cache-Control: max-age=60 60秒之后缓存过期(相对时间) 
    Date: Mon, 19 Nov 2012 08:39:00 GMT 当前response发送的时间 
    Expires: Mon, 19 Nov 2012 08:40:01 GMT 缓存过期的时间(绝对时间) 
    Last-Modified: Mon, 19 Nov 2012 08:38:01 GMT 服务器端文件的最后修改时间 
    ETag: "20b1add7ec1cd1:0" 服务器端文件的Etag值 

    (如上所说,需要注意的是:

    1、如果同时存在cache-control和Expires:浏览器总是优先使用cache-control,如果没有cache-control才考虑Expires

    2、Cache-Control: public 指可以公有缓存, 可以是数千名用户共享的。

         Cache-Control: private 指只支持私有缓存, 私有缓存是单个用户专用的。

    3、假设想要不使用缓存: CTRL+F5强制刷新浏览器, 可以让浏览器不使用缓存。

    含义:

    一、浏览器发送Http request, 给Web 服务器, header中带有Cache-Control: no-cache. 明确告诉Web服务器,客户端不使用缓存。

    二、Web服务器将把最新的文档发送给浏览器客户端.

    4、如果想要强制使用缓存,而不想去重新请求呢:

    方法:

    一、按F5刷新浏览器, 浏览器会去Web服务器验证缓存。

    二、如果是在地址栏输入网址然后回车,浏览器会"直接使用有效的缓存", 而不会发http request 去服务器验证缓存,这种情况叫做缓存命中 )

    总结:

    对于http请求来说,就存在强制缓存和比较缓存的2种说法;

    强制缓存:服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。 
    比较缓存:将缓存信息中的Etag和Last-Modified通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存

    强制缓存--详细解释:在缓存数据未失效的情况下,可以直接使用缓存数据,在没有缓存数据的时候,浏览器向服务器请求数据时,服务器会将数据和缓存规则一并返回,缓存规则信息包含在响应header中。对于强制缓存来说,响应header中会有两个字段来标明失效规则(Expires/Cache-Control) 

    对比缓存--详细解释:浏览器第一次请求数据时,服务器会将缓存标识与数据一起返回给客户端,客户端将二者备份至缓存数据库中。 
    再次请求数据时,客户端将备份的缓存标识发送给服务器,服务器根据缓存标识进行判断,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据)

  • 相关阅读:
    (OK) usbip-utils
    How To Set Up A USB-Over-IP Server And Client With Ubuntu 10.04
    linux内核模块获取设备IP地址
    (OK) 国内常用NTP服务器地址及IP
    2017年我国将开始部署和建设IPv6地址项目
    C++之STL和Boost
    linux内核IOCTL网络控制框架实现分析
    2016年 AI 技术发展综述
    2016年SDN/NFV开源三大趋势
    Angular
  • 原文地址:https://www.cnblogs.com/QiKa/p/13040347.html
Copyright © 2020-2023  润新知