背景:

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. 在 iTunes Connect 中,无法找到“My Apps”选项

    Cannot find "My Apps" option in iTunes Connect, to upload my app on the app-store:stackove ...

  2. Ubuntu只读文件系统修复方法

    首先备份重要数据 fsck.ext4 -p /dev/sdb5 reboot

  3. Monkey面试整理

    1. 查找进程命令是什么? adb shell ps adb shell ps |findstr 名称 2. 如何获取包名 1)获取手机上的所有包名信息. adb shell pm list pack ...

  4. python-自动登录禅道

    from bs4 import BeautifulSoup import hashlib import requests import re from tool.request_data_change ...

  5. Vsftpd 2.2.x安装和配置--centos7前的版本

    Vsftpd 2.2.x安装和配置--centos7前的版本 原文链接:https://my.oschina.net/loubobooo/blog/1633367 1. 关闭防火墙和Selinux L ...

  6. RabbitMQ六种队列模式-主题模式

    前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 [ ...

  7. [Algorithm] 94. Binary Tree Inorder Traversal iteratively approach

    Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...

  8. cloudevents js sdk 简单试用

    cloudevents 目前官方提供了不同语言的sdk,以下是js 的简单学习试用,从目前来说更新不是很好 clone 代码 git clone https://github.com/cloudeve ...

  9. 用于 Quinella/Exacta/Trifecta/Pick Four/Pick Six/Quaddie/Superfecta 7大规则的测试

    上2篇给了详细API 设计,下面我们来模拟测试下: Quinella: self.bet_type = "Quinella" self.nraces = 1 self.horse_ ...

  10. 一起学Makefile(四)

    变量的定义 makefile中的变量,与C语言中的宏类似,它为一个文本字符串(变量的值,其类型只能是字符串类型)提供了一个名字(变量名). 变量的基本格式: 变量名   赋值符   变量值 变量名指的 ...