【CDN理论基础】http的正向代理与反向代理及http缓存原理

news/2025/3/3 13:24:47/文章来源:https://www.cnblogs.com/o-O-oO/p/18747884

一、HTTP代理协议

HTTP代理的工作原理是在客户端和web服务器之间拦截和转发HTTP请求和响应。换句话说,当您尝试使用HTTP代理访问某个网站或服务时,您并没有直接与web服务器通信,而是由代理帮你去跟web服务器交互,将你的请求转发给web服务器,再将web服务器返回的内容再转发回给客户端。

在http代理协议中,一般分为两种,正向代理(Forward Proxy) 和反向代理(Reverse Proxy),如下图:

1.1 正向代理(Forward Proxy)

正向代理一般位于内网的网络出口处,充当客户端和互联网之间的中介。当客户端机器向互联网上的资源(如网页或文件)发出请求时,该请求首先被发送到正向代理。然后,代理服务器会代表客户端将请求转发到互联网,并将响应返回给客户端。通常,正向代理用于缓存数据、请求过滤、请求记录或请求转发(通过添加/删除HTTP头部、加密/解密或压缩资源)。

正向代理会向服务端隐藏客户端的身份,服务端只知代理的出口IP,而不知道真实的客户端地址。当然正向代理也可以缓存服务端的响应数据,共其他内部客户端访问。

如我们的校园网络,如不能直接访问互联网服务的,就可以走一个正向代理服务器去帮我们加载互联网资源。

1.2 反向代理(Reverse Proxy)

反向代理是位于服务端,一般在web服务前面,当客户端向互联网上的web服务器发出请求时,该请求首先被发送到反向代理。然后,反向代理将请求转发到其中一个web服务器,web服务器将内容返回给反向代理。然后,反向代理将响应返回给客户端。

与正向代理隐藏客户端身份相反,反向代理隐藏服务器的身份

1.3 正向代理与反向代理,一般会同时存在

二、HTTP缓存协议

缓存是用来提升web请求性能非常关键的技术,包括数据缓存,HTTP缓存等

2.1 核心目的

让数据访问闭环在离用户最近的位置,加快用户数据加载的速度,比如浏览器缓存,CDN边缘缓存,Web服务端的页面缓存,数据库缓存等等。

2.2 核心原理

在HTTP访问路径中,将不可变内容(一段时间内不可变内容)保存下来,并维护一定的过期策略,下一次访问相同内容且存储的数据没有过期的情况下,就可以直接返回之前存储下来的内容。

2.3 缓存访问逻辑

首次访问,缓存存储中没有内容,那缓存服务就会从源站服务器获取内容,这里就可以看到缓存服务就是扮演着代理服务的角色,在返回内容的同时,并将内容存储到自己本地。

下一次访问相同内容,就会从缓存服务中直接获取并返回到客户端。

2.4 缓存服务所处的位置

【浏览器缓存】

此存储是在浏览器中完成的。所有浏览器都有一个本地存储,通常用于检索以前访问过的资源。在缓存有效期内,下一次访问相同内容,就会从浏览器存储中直接打开

【代理缓存】

在http的代理层维护缓存空间,缓存既可以在正向缓存节点,可以用于缓存内部网络所有用户出公网访问的资源,实现资源访问共享;也会在反向代理节点,实现对web服务端的内容返回做缓存,共不同客户端访问使用

【应用缓存】

应用缓存在服务端应用中维护,一般更多放置于服务端的数据库前,或者其他数据存储前

2.5 缓存逻辑

1、强制缓存

强制缓存最常见的场景就是浏览器缓存,直接从浏览器维护的存储返回。在 Chrome 中,强缓存又分为 Disk Cache (存放在硬盘中)和 Memory Cache (存放在内存中),存放的位置是由浏览器控制的,强制缓存的控制头部如下

  • Expires

Expires 的值是一个 绝对的HTTP日期,在浏览器发起请求时,会根据系统时间和 Expires 的值进行比较,如果系统时间超过了 Expires 的值,缓存失效。由于和系统时间进行比较,所以当系统时间和服务器时间不一致的时候,会有缓存有效期不准的问题。Expires 的优先级最低。

  • Cache-Control

Cache-Control 是 HTTP/1.1 中新增的属性,在请求头和响应头中都可以使用,常用的属性值如有:

max-age:单位是秒,缓存时间计算的方式是距离发起的时间的秒数,超过间隔的秒数缓存失效

no-cache:不使用强缓存,需要与服务器验证缓存是否新鲜

no-store:禁止使用缓存(包括协商缓存),每次都向服务器请求最新的资源

private:专用于个人的缓存,中间代理、CDN 等不能缓存此响应

public:响应可以被中间代理、CDN 等缓存

must-revalidate:在缓存过期前可以使用,过期后必须向服务器验证

  • Pragma

Pragma 只有一个属性值,就是 no-cache ,效果和 Cache-Control 中的 no-cache 一致,不使用强缓存,需要与服务器验证缓存是否新鲜,在强制缓存中这个头部,优先级最高,不常用

2、协商缓存

浏览器强制缓存失效之后,就需要使用协商缓存,就是需要同服务端协商来判断缓存是否可用。

  • Last-Modified/If-Modified-Since

这是一对儿协商缓存头部,Last-Modified是响应头,If-Modified-Since是请求头。两个头都记录的是文件最后的修改时间,第一次请求服务端会把资源的最后修改时间放到 Last-Modified 响应头中;

第二次发起请求的时候,会在If-Modified-Since 头中将之前服务端返回的 Last-Modified时间填入,服务端根据文件最后一次修改时间和 If-Modified-Since 的值进行比较,如果相等,返回 304 ,并加载浏览器缓存。

  • ETag/If-None-Match

ETag/If-None-Match 的值是一串 hash 码,代表的是一个资源的标识符,当服务端的文件变化的时候,它的 hash码会随之改变,通过请求头中的 If-None-Match 和当前文件的 hash 值进行比较,如果相等则表示命中缓存。

ETag 又有强弱校验之分,如果 hash 码是以 "W/" 开头的一串字符串,说明此时协商缓存的校验是弱校验的,只有服务器上的文件差异(根据 ETag 计算方式来决定)达到能够触发 hash 值后缀变化的时候,才会真正地请求资源,否则返回 304 并加载浏览器缓存。Etag的优先级高于Last-Modified

原创 发哥 Linux运维实战派

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892912.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[译] DeepSeek开源smallpond开启DuckDB分布式之旅

DeepSeek 正通过 smallpond(一种新的、简单的分布式计算方法)推动 DuckDB 超越其单节点的局限。然而,我们也需要探讨,解决了横向扩展的挑战后,会不会是带来新的权衡问题呢?译者序:DuckDB 是一款基于 PostgreSQL 语法生态的分析型嵌入式数据库,是近年来数据库圈的新秀,…

2025 联合省选流水账(公开版)

Remain loving. Keep dreaming.2025 联合省选流水账(公开版) 前言 写流水账是为了知道我每天干了什么。 2.3 春节假期结束,该上课了。 如果没有进队,就去学文化课,如果进了队,就晚一点去学文化课。 人,别摆了。 2.4 下午在水 B 站,晚上去看花灯了。 2.5 晚上收拾行李。…

3.4K star!全能PDF处理神器开源!文档转换/OCR识别一键搞定

PDF-Guru 是一款开箱即用的全能型PDF处理工具,支持跨平台文档转换、智能OCR识别、多格式解析等核心功能。项目采用模块化架构设计,提供简洁的Web界面和API接口,开发者可快速集成到现有系统中。嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工…

ICP备案注销

ICP备案注销教程服务器供应商:腾讯云

通过fetch_mcp,让Cline能够获取网页内容。

fetch_mcp介绍 GitHub地址:https://github.com/zcaceres/fetch-mcp此MCP服务器提供了以多种格式(包括HTML、JSON、纯文本和Markdown)获取网络内容的功能。 效果 以这个新闻页面为例:获取页面的Html效果:获取页面文本效果:获取md格式内容并保存到test.md效果:是不是很有帮…

index.aspx ,add的重复集合项

原因:地址错误,缺少index.aspx 正确地址:127.0.0.1/K3Cloud/mobile/index.aspx

【日记】周末基本都在睡觉呢(1215 字)

正文这个周末几乎什么都没做。昨天看了一点点内科学,不过主要还是在涩涩(笑)。目前进度停留在肺结核。肺结核之前过年的时候看过一点点,主要还是做笔记。如果不看,可能我一生都不知道七八成的人都有肺结核。我听到唐子益说这个结论的时候极其诧异。结核杆菌耐酸耐碱耐冷耐…

AI加速,颠覆创新 |《2月中国数据库行业分析报告》已发布,本月聚焦 LLM x 数据库

DeepSeek、OpenAI背后是什么数据库?向量数据库能为LLM带来哪些增强?国产数据库又能与LLM碰撞出哪些火花?欢迎阅读本期墨天轮中国数据库行业分析报告一起寻找答案!为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天…

HTB 取证分析 Logger WP

早上没课没事干,写点不那么耗时间的题目如上,需要分析流量数据,下载完pcap包拖入wireshark,打开查看一下 都是USB的流量,分析一下数据,大概能够知道: 数据包长度为35 传输方式为中断传输 且需要寻找存在按键输入的流量 那么就可以在wireshark内筛选一下数据了,可以过滤…

更像的五星红旗

点击查看代码 import turtle# 设置屏幕 screen = turtle.Screen() screen.bgcolor("white") screen.setup(width=800, height=600) # 设置窗口大小# 设置画笔 pen = turtle.Turtle() pen.speed(10) pen.penup()# 绘制红旗背景 def draw_rectangle(color, width, hei…

跨平台Windows和Linux(银河麒麟)操作系统OCR识别应用

跨平台在Windows和Linux银河麒麟桌面操作系统V10(SP1)上运行OCR识别1 运行效果代码下载链接: https://pan.baidu.com/s/1NUfLTjk6kzXJKsaH7yo4qA?pwd=rk5c 提取码: rk5c。在银河麒麟桌面操作系统V10(SP1)上运行OCR识别效果如下图:2 在Linux上安装Tesseract OCR引擎 2.1 下载t…

EVE-NG虚拟机OVF模板转换为QCOW2模板

EVE-NG虚拟机OVF模板转换为QCOW2模板 一、准备工具: 操作环境:Windows (我用的Windows11) 软件:OVFTool_x64、qemu-img v2.3.0 下载地址:我用夸克网盘分享了「OVF文件转换为QCOW2格式工具」,点击链接即可保存。 链接:https://pan.quark.cn/s/5352f2688419 提取码:jKW9…