背景:

GET 访问一个应用的时候,内容一般都不会时刻在变,如何让下一个人请求时极速获取响应过的内容,并且在内容发生变更时能够识别出来。

在应用层做 Cache 是一种方法,但是依旧要响应整个 Body 给客户端,没有减少带宽消耗,只减少 CPU、DB 消耗。

HTTP Cache 就是解决这个问题的,相同请求的第二次不再到达后端,具体支持是由标准 HTTP 协议。

使用 HTTP Cache 之后的请求流程可以看这篇 HTTP Caching 的两种模式图解:https://tomayko.com/blog/2008/things-caches-do

这里提一下另一种方式 HTTP Gateway Cache,是完全把 Client 和 Application 独立开,相当于一个中间层,接受客户端请求,接收后端响应并发送给客户端。

HTTP gateway cache 的方案有 Varnish,Squid。

HTTP Cache 提供了常用的四个缓存头来启用缓存,只工作于安全方法 GET、HEAD,

  Cache-Control

  Expires

  ETag(entity-tag 的意思)

  Last-Modified

前两个方式都可用于设置缓存过期时间,后两个方式都可用于给客户端验证缓存是否已失效。

缓存过期时间 和 缓存验证 可以结合起来达到最好效果。

在 Laravel 中使用 HTTP Cache

https://laravel.com/docs/6.x/responses#attaching-headers-to-responses,

第一种方式是借助 Response 组件的 API,通过给 Response 附加 Header 信息,header() 与 withHeaders() 两类方法。

第二种方式是使用 Cache Control Middleware 给一组路由快速设置 cache-control、etag、last_modified 等。

# routeMiddleware
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class # Apply example
Route::middleware('cache.headers:private;max_age=60')

某些场景,如果不希望/没必要刷新设置好的 HTTP Cache,其它位置又想获取该 API 的实时数据,最简单的方式是加随机参数,如 ?t=time(),互不影响。

Symfony HTTP Cache:https://symfony.com/doc/current/http_cache.html

Symfony HTTP Cache Validation:https://symfony.com/doc/current/http_cache/validation.html

HTTP/1.1 RFC, HTTP Caches and associated header fields:https://tools.ietf.org/html/rfc7234

HTTP/1.1 RFC, HTTP Conditional Request:https://tools.ietf.org/html/rfc7234

cache-control private:https://baike.baidu.com/item/Cache-control/1885913

Link:https://www.cnblogs.com/farwish/p/12040843.html

[INet] 借助 HTTP Cache 加速应用响应的更多相关文章

  1. 大型网站架构演化(六)——使用反向代理和CDN加速网站响应

    随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大.有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开.为了提供更 ...

  2. CDN及CDN加速原理

    本想自己写这个主题的文章,但网上已经有人写了一篇非常好的文章,觉得难以望其项背.就没有必要再写,直接转载如下: 在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应速度.优化现有Inte ...

  3. cdn网络加速

    CDN全称Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节点服 ...

  4. Linux就业技术指导(四):企业CDN缓存加速原理解密

    1.1 CDN(网站加速) 1.1.1 什么是CDN CDN的全称Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和 ...

  5. CDN加速-内容分发网络

    内容分发网络 (互联网技术) 编辑 CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输 ...

  6. CDN是什么与CDN加速的原理

    CDN是什么 CDN全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络 CDN设计思路 避让:尽可能避开互联网上有可能影响数 ...

  7. CDN之Web Cache

    1. Cache 的工作方式 Web Cache 作为一种网页缓存技术,可以在用户访问网站服务器的任何一个中间网元上实现.根据 HTTP 协议的定义,在一次网页访问中,用户从客户端发出请求到网站服务器 ...

  8. 高并发大流量专题---5、CDN加速

    高并发大流量专题---5.CDN加速 一.总结 一句话总结: CDN就是多整几台节点服务器,选距离用户最近的服务器来给用户服务,实现的话可以用阿里云.腾讯云他们提供的功能,简单方便,妈妈再也不用担心我 ...

  9. 全站加速(DCDN)- IP应用加速产品解读

    5月22日下午15点,阿里云全站加速(DCDN)-IP应用加速如期发布.IP应用加速是阿里云自主研发的一款更高效.更安全.更便捷的动态加速产品,结合阿里云CDN本身的资源优势,利用就近接入.智能路由, ...

随机推荐

  1. CF300D Painting Square

    Painting Square https://codeforces.com/problemset/problem/300/D 给了一个理解起来较复杂但是本质上很简单的分形. 题解 很显然,只有边长为 ...

  2. js 用 hasOwnProperty() 判定属性是来自该对象成员,还是原型链

            var People=function(){         this.name='liujinyu';     };          People.prototype={      ...

  3. js版本规范的表示:ES6 == ES 6 == ECMAScript 6 == ECMA-262 6

    Ecma 国际大会宣布正式批准ECMA-262第 6 版,亦即 ECMAScript 2015(曾用名:ECMAScript 6.ES6)的语言规范. 关系 ECMA-262 == ECMAScrip ...

  4. 理解JPA注解@GeneratedValue的使用方法

    https://blog.csdn.net/u012838207/article/details/80406716 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基 ...

  5. 浙大PAT 2-10. 海盗分赃——经典博弈

    题意 P个海盗偷了D颗钻石后分赃($3 \leq P, D\leq 100$),采用分赃策略: 从1号开始,提出一个分配金币的方案,如果能够得到包括1号在内的绝对多数(即大于半数)同意,则执行该方案, ...

  6. SpringBoot整合ActiveMQ发送邮件

    虽然ActiveMQ以被其他MQ所替代,但仍有学习的意义,本文采用邮件发送的例子展示ActiveMQ 1. 生产者1.1 引入maven依赖1.2 application.yml配置1.3 创建配置类 ...

  7. 洛谷 P1121 环状最大两段子段和 题解

    每日一题 day57 打卡 Analysis 对于这个问题,由于分成了两个子序列,我们不妨就是枚举一下可能出现的情况: 无非就这两种: 1.+++++0000+++++0000++++ 2.0000+ ...

  8. Pandas模块 -- 数据类型转换,描述统计

    car=pd.read_csv(r'E:\Python\sec_cars.csv',sep=',').head(32) # print(car) print("数据集的类型:",t ...

  9. 爬虫 -- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe6 in position 301: unexpected end of data

     errors参数有3个值:strict,  ignore,  replace html.decode("utf-8"),这种形式有时会报错,那么修改为下面形式,将decode函数 ...

  10. pathlib.Path 类的使用

    from pathlib import Path 参考 https://www.jb51.net/article/148789.htm