第5章-与HTTP协作的Web服务器
为什么缓存能减少访问源服务器的次数缓存服务器和客户端缓存分别是什么一台服务器为什么能放多个网站虚拟主机HTTP/1.1 允许一台 HTTP 服务器搭建多个 Web 站点。物理上可能只有一台服务器但使用虚拟主机功能后表面上可以像多台服务器一样分别承载不同域名的网站。问题在于多个域名经过 DNS 解析后可能指向同一个 IP 地址。当请求到达服务器时服务器需要知道客户端到底想访问哪个域名下的网站。这个判断依赖 HTTP 请求中的Host首部。GET /index.html HTTP/1.1 Host: blog.example.com可以把虚拟主机的访问过程理解成这样域名 ADNS 解析到同一台服务器域名 BHTTP 请求携带 Host 首部服务器根据 Host 区分目标网站所以虚拟主机的核心不是“一台机器真的变成了多台机器”而是服务器根据请求里的Host首部把同一个 IP 上的不同域名区分开。HTTP 请求路上的中间角色HTTP 通信时除了客户端和服务器还可能存在一些用于转发通信数据的应用程序。书中重点介绍了三类代理、网关、隧道。它们都可以把请求转发给通信线路上的下一站服务器也可以接收下一站服务器返回的响应再转发给客户端。代理替客户端转发请求代理是一种有转发功能的应用程序扮演客户端和服务器之间的“中间人”角色。它的基本行为是请求不改变请求 URI转发请求响应响应客户端代理服务器源服务器持有资源实体的服务器被称为源服务器。代理从客户端接收请求后会把请求转发给前方持有资源的目标服务器源服务器返回的响应也会先经过代理再传给客户端。在 HTTP 通信中可以级联多台代理服务器。每次通过代理转发请求或响应时需要追加Via首部用来标记经过的主机信息。客户端代理 proxy1代理 proxy2源服务器使用代理服务器的理由包括利用缓存减少网络带宽流量在组织内部针对特定 URI 进行访问控制获取访问日志书中还按两个维度给代理分类分类维度类型含义是否使用缓存缓存代理转发响应时预先保存资源副本再次收到相同资源请求时可直接返回缓存是否修改报文透明代理转发请求或响应时不对报文做任何加工是否修改报文非透明代理转发请求或响应时会对报文内容进行加工网关让 HTTP 连接到非 HTTP 服务网关和代理的工作机制很相似也会转发其他服务器的通信数据。不同的是网关能让通信线路上的服务器提供非 HTTP 协议服务。对客户端来说网关有时就像自己拥有资源的源服务器一样处理请求客户端未必能察觉通信目标其实是网关。转换为非 HTTP 协议通信处理结果HTTP 响应客户端 HTTP 请求网关非 HTTP 服务器/后端系统书中举到的例子包括网关连接数据库使用 SQL 语句查询数据Web 购物网站通过网关和信用卡结算系统联动网关还能提高通信的安全性例如在客户端与网关之间的通信线路上加密以确保连接安全。隧道建立一条安全通信线路隧道是在相隔较远的客户端和服务器之间进行中转并保持双方通信连接的应用程序。它的目的是按要求建立一条与其他服务器的通信线路并使用 SSL 等加密手段进行通信确保客户端能与服务器安全通信。通过隧道建立安全通信线路客户端隧道服务器隧道本身不会解析 HTTP 请求而是把请求保持原样中转给之后的服务器。通信双方断开连接时隧道也会结束。代理、网关、隧道的区别这三个概念容易混在一起可以用下面这张表快速区分概念书中核心描述典型作用代理 Proxy位于客户端和服务器之间接收客户端请求并转发给源服务器再把响应转发给客户端缓存、访问控制、访问日志网关 Gateway转发其他服务器的通信数据让服务器提供非 HTTP 协议服务连接数据库、连接信用卡结算系统、提高通信安全性隧道 Tunnel在客户端和服务器之间中转并保持通信连接本身不解析 HTTP 请求使用 SSL 等加密手段建立安全通信线路一句话记忆代理偏“转发”网关偏“转换”隧道偏“透明传输”。缓存为什么能让 Web 更快缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可以减少对源服务器的访问从而节省通信流量和通信时间。缓存服务器属于代理服务器的一种也就是缓存代理。缓存服务器的基本工作方式可以概括为没有缓存已有缓存有效需要确认或已失效客户端请求资源缓存服务器内是否已有资源副本向源服务器请求资源转发响应时复制资源并保存返回给客户端缓存是否仍然有效向源服务器确认有效性必要时重新获取新资源缓存的优势在于如果某个资源已经被缓存客户端就可以从缓存服务器获取资源源服务器也不必反复处理相同请求。但缓存并不是只要存在就一定能直接使用。书中强调即使缓存服务器中有缓存也可能因为客户端要求、缓存有效期、源服务器资源更新等因素需要向源服务器确认资源的有效性。若判断缓存失效缓存服务器会再次从源服务器获取新资源。客户端也有缓存缓存不仅可以存在于缓存服务器内也可以存在于客户端浏览器中。浏览器缓存如果有效就不必再向服务器请求相同资源可以直接从本地磁盘读取。和缓存服务器一样当浏览器判断缓存过期后也会向源服务器确认资源有效性如果缓存已经失效就会再次请求新资源。补充理解缓存相关首部要到后面一起看第 5 章主要讲“缓存是什么、缓存服务器和客户端缓存怎么工作”。具体的缓存控制细节会在 HTTP 首部相关内容里展开。实际排查缓存问题时常见会关注这些字段Cache-ControlExpiresETagLast-ModifiedAge其中no-cache和no-store很容易混淆no-cache不是“完全不缓存”而是“使用缓存前需要确认有效性”真正不保存内容的是no-store。实践用 curl 观察 Host、代理和缓存首部下面是结合开发场景的补充实践不是原书中的命令示例。1. 通过 Host 首部模拟访问虚拟主机curl -H Host: www.example.com http://192.168.1.100/ curl -H Host: blog.example.com http://192.168.1.100/同一个 IP 地址可以因为Host不同而路由到不同站点。2. 通过 HTTP 代理发送请求curl -x http://proxy.example.com:8080 -v http://www.example.com/如果链路中存在代理可以重点观察是否出现Via等字段。3. 查看缓存相关响应首部curl -I https://www.example.com/ \ | grep -i cache-control\|expires\|etag\|last-modified\|age常见需要关注的字段包括Cache-ControlExpiresETagLast-ModifiedAge实际开发中怎么用这些知识下面这部分是结合开发场景的补充理解不属于第 5 章原文逐条展开的内容。配置反向代理时需要关注Host是否正确传给后端是否存在多层代理是否需要通过代理层记录访问日志是否存在缓存导致资源没有及时更新排查缓存问题时可以按这个顺序看响应里有没有缓存相关首部浏览器或代理是否命中缓存缓存是否已经过期是否向源服务器确认过资源有效性源服务器是否返回了新资源小结第 5 章虽然篇幅不长但它把 HTTP 从“客户端和服务器的两点通信”扩展到了更真实的 Web 通信链路里。可以这样记虚拟主机一台服务器承载多个站点核心靠Host区分代理位于客户端和源服务器之间负责转发请求和响应网关让 HTTP 通信连接到非 HTTP 服务也可提高通信安全性隧道建立安全通信线路本身不解析 HTTP 请求缓存保存资源副本减少源服务器访问和通信时间

相关新闻

YOLO轻量化与部署优化- 第80篇:模型压缩与部署的综合优化指南

YOLO轻量化与部署优化- 第80篇:模型压缩与部署的综合优化指南

一、引言 在深度学习模型从实验室走向实际应用的过程中,模型压缩与部署优化是不可或缺的关键环节。YOLOv8作为当前最先进的目标检测算法,虽然在精度上取得了优异表现,但其较大的计算量和参数量给资源受限的部署环境带来了巨大挑战。如何在保证精度的前提下,尽可能地压缩模…

2026/6/29 20:57:14阅读更多 →
SwissTable 比 std::unordered_map 快一个数量级,核心是它用一条 SIMD 指令同时比 16 个槽的 7-bit 指纹

SwissTable 比 std::unordered_map 快一个数量级,核心是它用一条 SIMD 指令同时比 16 个槽的 7-bit 指纹

“hash map 慢是因为 hash 函数不够好”——这句话被说了十年,但它是错的。你可以把 hash 函数从 std::hash 换成 wyhash、xxHash、甚至用密码学级的 SipHash,std::unordered_map 的 find 延迟不会有数量级变化。瓶颈不在 hash 的质量,在 hash 之后的事:每次查找至少追两个…

2026/6/29 20:57:14阅读更多 →
RAG系列:#6 一文搞懂RAG存储技术:文件、元数据、切片、向量

RAG系列:#6 一文搞懂RAG存储技术:文件、元数据、切片、向量

切片存储:为适配 LLM 输入长度,切割生成的文件文本片段 向量存储:切片经 Embedding 模型转化而成的高维向量,用于相似度检索 单看数据关联逻,四层数据的绑定关系是通过全局唯一 ID 实现的:原始文件的 ID…

2026/6/29 20:57:14阅读更多 →
Codex 桌面端新手使用教程

Codex 桌面端新手使用教程

一、概述 1.1 Codex 桌面端是什么 Codex 桌面端是装在本机上的 AI 编程助手。用户指定一个文件夹并用自然语言描述需求,Codex 可在该文件夹内创建文件、修改代码、执行命令。 与 ChatGPT 网页聊天的区别:Codex 桌面端会直接修改本机文件,用…

2026/6/29 22:02:37阅读更多 →
从零到一:手把手教你用Elsevier cas-sc LaTeX模板完成投稿

从零到一:手把手教你用Elsevier cas-sc LaTeX模板完成投稿

1. 认识Elsevier cas-sc LaTeX模板 第一次接触Elsevier投稿系统时,我和大多数科研新手一样手足无措。直到导师推荐使用cas-sc模板,才发现原来学术排版可以如此优雅。这个由Elsevier官方维护的LaTeX模板,专为单栏排版设计,特别适合…

2026/6/29 22:02:37阅读更多 →
一张水印图引发伦理核查,兰大事件敲响所有科研人警钟

一张水印图引发伦理核查,兰大事件敲响所有科研人警钟

近期兰州大学化学化工团队一篇膜科学方向论文发表于Elsevier顶刊《Journal of Membrane Science》,正式刊发的机理示意图中清晰残留大众通用AI平台显性水印,被科研网友曝光后迅速发酵。期刊第一时间启动学术伦理调查,兰州大学同步成立专项调查…

2026/6/29 22:02:37阅读更多 →
Python脚本解密SecureCRT V2密码:运维工程师的应急自救指南

Python脚本解密SecureCRT V2密码:运维工程师的应急自救指南

1. 项目概述:当SecureCRT密码成为拦路虎作为一名常年和网络设备、服务器打交道的运维工程师或网络管理员,SecureCRT绝对是工具箱里的“瑞士军刀”。它稳定、功能强大,支持SSH、Telnet、串口等多种协议,保存的会话配置更是我们的工…

2026/6/29 22:02:37阅读更多 →
深度把玩劳力士3235机芯的老哥,先放大50倍看看这组表盘序列号的防伪公差

深度把玩劳力士3235机芯的老哥,先放大50倍看看这组表盘序列号的防伪公差

昨晚整理老资料时,看到条几年前的留言。当时那兄弟说,在这个到处是包装的时代,如果不是看这署名透着一股不愿随波逐流的倔强,他早把文章划走了。时间长了,大家都能看清谁在讲真话。今天咱们继续掏心窝子。 1956年欧米…

2026/6/29 22:02:37阅读更多 →
Java毕业设计-基于 Spring Boot 的电影售票系统的设计与实现 基于 Spring Boot 的影院售票管理系统设计与开发(源码+LW+部署文档+全bao+远程调试+代码讲解等)

Java毕业设计-基于 Spring Boot 的电影售票系统的设计与实现 基于 Spring Boot 的影院售票管理系统设计与开发(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/29 21:57:34阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/29 3:27:55阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/29 2:19:08阅读更多 →
如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南 【免费下载链接】DeepBump Normal & height maps generation from single pictures 项目地址: https://gitcode.com/gh_mirrors/de/DeepBump 还在为3D建模中的纹理制作而烦恼吗?…

2026/6/29 0:01:47阅读更多 →
OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单! 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCA…

2026/6/29 0:01:47阅读更多 →
终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你是否厌倦了Windows 11系统自带的20…

2026/6/29 0:01:47阅读更多 →