背景:

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 等。

  1. # routeMiddleware
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class
  2.  
  3. # 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. 提交代码报错 error: failed to push some refs to

    在本人想把本地的分支推送到远程仓库时,突然出现了错误提醒error: failed to push some refs to....心里一咯噔,推不上去这还得了,手比脑快地就去google了一下. 然 ...

  2. JSON Web Token (JWT) - Introduction

    To validate the challenge, connect as admin.------------以admin登陆 https://jwt.io/introduction/        ...

  3. [React] Handle React Suspense Errors with an Error Boundary

    Error Boundaries are the way you handle errors with React, and Suspense embraces this completely. Le ...

  4. 解读Es6之 promise

            单线程:  在同一时间只能有同一任务进行.JavaScript就是一门单线程语言                 当有多个任务需要进行时,则需要进行排队,前一个执行完毕才能执行下一个; ...

  5. (尚029)Vue_案例_交互footer组件功能

    需要实现界面截图: 难点分析:sAllCheck必须定义为计算属性 1.想到问题: 一旦写一个组件,需要接收哪些属性?? 因为只有属性确定了,标签才好写 todos属性可以确定三个方面的显示 2.做交 ...

  6. 2019 NOIP 夏令营(模拟赛1)

    一来到夏令营,第一天上机就考试, 哎,简直不让人活了 这难道是给我们的见面礼??? A https://www.luogu.org/problemnew/show/P1197 #include< ...

  7. cogs 944. [東方S3] 藤原妹红

    二次联通门 : cogs 944. [東方S3] 藤原妹红 /* cogs 944. [東方S3] 藤原妹红 最小生成树 + 树形dp 首先对原图跑最下生成树 后建出一棵树 在树上进行dp 先走到叶子 ...

  8. map访问key不存在的情况下,用find。比[]直接访问的意思不一样,map[key]不返null

    key不存在的话则创建一个pair并调用默认构造函数 map<CGuid, CLibItem>::iterator iterItem = m_world->m_library_sce ...

  9. Powershell基础学习

    从吐司偷来的图片,拿来当做引导吧: 0x01 简介 Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能.当然 ...

  10. H5中对history栈的操作

    今天研究一下H5中history操作的相关知识,首先梳理一下基本内容: 一.在history中的跳转 使用 back(), forward()和 go() 方法来完成在用户历史记录中向后和向前的跳转. ...