14 http协议详解
1、http是应用层协议统一资源定位符例如 http://www.jd.com是个URLhttp是协议www.jd.com是域名表示互联网上的一个位置有些url的资源定位会更清晰比如http://www.jd.com/index.html2、HTTP 请求的准备1.浏览器会将 www.jd.com 这个域名发送给DNS服务器让它解析为IP地址.(后面的文章会详解DNS)2.建立TCP连接目前使用的HTTP协议大部分都是1.1。在1.1的协议里面默认是开启了Keep-Alive的这样建立的TCP连接就可以在多次请求中复用。3.建立了连接以后浏览器就要发送HTTP的请求请求报文格式如下第一部分请求行在请求行中URL 就是 http://www.163.com 版本为 HTTP 1.1。方法分为GETPOSTPUT在实际使用过程中POST,PUT有稍许的区别。POST 往往是用来创建一个资源的而 PUT 往往是用来修改一个资源的。第二部分首部字段3. 首部是 key value通过冒号分隔。例如Accept-CharsetContent-Type等4. 此处需要强调一点的是缓存比如电商系统的商品页面热点数据秒杀场景下需要做成缓存的架构基本如下所示后面的文章会详解DNS和CDN此处只简单说明Nginx.Nginx是如何处理Http协议的呢5. 对于静态资源有 Vanish 缓存层。当缓存过期的时候才会访问真正的 Tomcat 应用集群。1.在HTTP头里面Cache-control是用来控制缓存的。2.当客户端发送的请求中包含 max-age 指令时如 果判定缓存层中资源的缓存时间数值比指定时间的数值小那么客户端可以接受缓存的资源当指定max-age 值为0那么缓存层通常需要将请求转发给应集群。3.If-Modified-Since也是一个关于缓存的。也就是说如果服务器的资源在某个时间之后更新了 那么客户端就应该下载最新的资源如果没有更新服务端会返回“304NotModified”的响应那客户端就不用下载了也会节省带宽。HTTP 请求的发送1.HTTP协议是基于TCP协议的所以它使用面向连接的方式发送请求通过 stream 二进制流的方式传给对方2.到了TCP层它会把二进制流变成一个个的报文段发送给服务器。3.在发送给每个报文段的时候都需要对方有一个回应ACK来保证报文可靠地到达了对方。4.如果没有回应那么TCP这一层会进行重新传输直到可以到达。同一个包有可能被传了好多次。5.TCP层发送每一个报文的时候都会加上源地址和目标地址放到IP头里面交给IP层进行传输。6.IP层需要查看目标地址和自己是否是在同一个局域网。如果是就发送ARP协议来请求这个目标地址对应的MAC地址然后将源MAC和目标MAC放入MAC头发送出去即可。7.如果不在同一个局域网就需要发送到网关还要需要发送ARP协议来获取网关的MAC地址然后将源MAC和网关MAC放入MAC头发送出去。8.网关收到包发现MAC符合取出目标IP地址根据路由协议找到下一跳的路由器获取下一跳路由器的MAC地址将包发给下一跳路由器。9.这样路由器一跳一跳终于到达目标的局域网。这个时候最后一跳的路由器能够发现目标地址就在自己的某一个出口的局域网上。于是在这个局域网上发送ARP获得这个目标地址的MAC地址将包发出去。10.目标的机器发现MAC地址符合就将包收起来发现IP地址符合根据IP头中协议项知道自己上 一层是TCP协议于是解析TCP的头里面有序列号需要看一看这个序列包是不是我要的如果是就放入缓存中然后返回一个ACK如果不是就丢弃。11.TCP头里面还有端口号HTTP的服务器正在监听这个端口号。于是目标机器自然知道是HTTP服务 器这个进程想要这个包于是将包发给HTTP服务器。HTTP服务器的进程看到原来这个请求是要访问一个网页于是就把这个网页发给客户端至此一个http的页面请求就完成了。HTTP 返回的构建HTTP 的返回报文也是有一定格式的。也是基于 HTTP 1.1状态码会反应 HTTP 请求的结果首部key valueContent-TypeRetry-After表示告诉客户端应该在多长时间以后再次尝试一下。“503 错误”是说“服务暂时不再和这个值配合使用”。然后把刚才的发送过程反向走一遍。虽然两次不一定走相同的路径但是逻辑过程是一样的一直到达客户端。当浏览器拿到了 HTTP 的报文。发现返回“200”一切正常于是就从正文中将 HTML 拿出来。HTML 是一个标准的网页格式。浏览器只要根据这个格式展示出一个绚丽多彩的网页。这就是一个正常的 HTTP 请求和返回的完整过程。HTTP 2.0HTTP 1.1 在应用层以纯文本的形式进行通信每次通信都要带完整的 HTTP 的头而且不考虑 pipeline模式的话每次的过程总是像上面描述的那样一去一回。这样在实时性、并发性上都存在问题。为了解决这些问题HTTP 2.0 会对 HTTP 的头进行一定的压缩将原来每次都要携带的大量 key value在两端建立一个索引表对相同的头只发送索引表中的索引。HTTP 2.0 协议将一个 TCP 的连接中切分成多个流每个流都有自己的 ID而且流可以是客户端发往服务端也可以是服务端发往客户端。其实只是一个虚拟的通道。流是有优先级的。HTTP 2.0 还将所有的传输信息分割为更小的消息和帧并对它们采用二进制格式编码。常见的帧有Header 帧用于传输 Header 内容并且会开启一个新的流。再就是Data 帧用来传输正文实体。多个 Data 帧属于同一个流通过这两种机制HTTP 2.0 的客户端可以将多个请求分到不同的流中然后将请求内容拆成帧进行二进制传输。这些帧可以打散乱序发送 然后根据每个帧首部的流标识符重新组装并且可以根据优先级决定优先处理哪个流的数据。举例假设我们的一个页面要发送三个独立的请求一个获取 css一个获取 js一个获取图片 jpg。如果使用HTTP1.1就是串行的但是如果使用HTTP2.0就可以在一个连接里客户端和服务端都可以同时发送多个请求或回应而且不用按照顺序一对一对应。HTTP 2.0 其实是将三个请求变成三个流将数据分成帧乱序发送到一个 TCP 连接中。优点7. HTTP 2.0 成功解决了 HTTP 1.1 的队首阻塞问题8. 也不需要通过 HTTP 1.x 的 pipeline 机制用多条 TCP 连接来实现并行请求与响应减少了 TCP 连接数对服务器性能的影响3、持久连接节省通信量HTTP 协议的初始版本中每进行一次 HTTP 通信就要断开一次 TCP 连接。以当年的通信情况来说因为都是些容量很小的文本传输所以即使这样也没有多大问题。可随着 HTTP 的普及文档中包含大量图片的情况多了起来。比如使用浏览器浏览一个包含多张图片的 HTML 页面时在发送请求访问HTML 页面资源的同时也会请求该 HTML 页面里包含的其他资源。因此每次的请求都会造成无谓的 TCP 连接建立和断开增加通信量的开销。持久连接为解决上述 TCP 连接的问题HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接HTTP Persistent Connections也称为 HTTP keep-alive 或 HTTP connection reuse的方法。持久连接的特点是只要任意一端没有明确提出断开连接则保持 TCP 连接状态。持久连接旨在建立 1 次 TCP 连接后进行多次请求和响应的交互。持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销减轻了服务器端的负载。另外减少开销的那部分时间使 HTTP 请求和响应能够更早地结束这样 Web 页面的显示速度也就相应提高了。在 HTTP/1.1 中所有的连接默认都是持久连接。

相关新闻

Godot引擎集成深度强化学习实战:从环境搭建到AI模型部署

Godot引擎集成深度强化学习实战:从环境搭建到AI模型部署

1. 项目概述:当开源游戏引擎遇上深度强化学习 如果你正在用Godot做游戏,并且对“让游戏角色自己学会玩”这件事感兴趣,那这个组合绝对值得你花时间研究。Godot引擎,以其轻量、开源和友好的节点系统著称,是独立开发者的…

2026/10/9 17:13:21 阅读更多 →
保角霍奇对偶介导的九维/四维认知代数同构深入研究报告

保角霍奇对偶介导的九维/四维认知代数同构深入研究报告

保角霍奇对偶介导的九维/四维认知代数同构深入研究报告 作者:方见华 单位:世毫九实验室 摘要 本报告将此前哲学性的认知投影命题,严格重构为可核验、可量化、可对接主体间对话动力学的微分拓扑理论体系。核心成果为构建SH9保角认知纤维丛&…

2026/10/9 7:28:50 阅读更多 →
自指宇宙学(SRC/SH9)深度研究:数学基础、可计算落地与观测验证

自指宇宙学(SRC/SH9)深度研究:数学基础、可计算落地与观测验证

自指宇宙学(SRC/SH9)深度研究:数学基础、可计算落地与观测验证 作者:方见华 单位:世毫九实验室 前置符号约定: • 对话流形 \mathcal{M}_{\text{dialogue}}:紧致连通复4维带边光滑流形&#xff…

2026/10/10 15:14:04 阅读更多 →

最新新闻

LiteLLM:大模型API统一调用协议层实践指南

LiteLLM:大模型API统一调用协议层实践指南

1. 从“调用大模型像调用API”说起:LiteLLM到底在解决什么真问题? 你有没有过这样的经历:上周刚用OpenAI的gpt-4-turbo跑通一个客服对话系统,这周客户突然要求切换成Anthropic的claude-3-haiku——结果发现,光是把 op…

2026/10/14 8:52:31 阅读更多 →
HarmonyOS NEXT Tab页切换事件处理与优化实践

HarmonyOS NEXT Tab页切换事件处理与优化实践

1. 项目概述 在HarmonyOS应用开发中,Tab布局是常见的界面组织形式。当用户在不同Tab页之间切换时,开发者经常需要捕获"将要展示"的事件,以便在目标Tab页显示前执行数据预加载、状态检查等关键操作。这个需求看似简单,但…

2026/10/14 8:52:31 阅读更多 →
Three.js进阶:WebGPU渲染器、粒子系统与性能优化

Three.js进阶:WebGPU渲染器、粒子系统与性能优化

1. 这期圈子里最值得跟进的三个动向Three.js 今日案例&热点185期,这两天圈子里讨论最多的是几个和版本、渲染底层相关的消息。很多人可能还停留在“Three.js 就是WebGL的封装库”这个印象里,但这期的热点几乎都在讲同一件事:新渲染管线、…

2026/10/14 8:52:31 阅读更多 →
UGUI性能优化从Canvas和RectTransform基础原理开始

UGUI性能优化从Canvas和RectTransform基础原理开始

1. 为什么“UGUI优化”不是性能调优的终点,而是开发流程的起点 很多人看到“UGUI优化”四个字,第一反应是:项目卡顿了?Draw Call爆表了?Canvas重建太频繁?于是立刻打开Profiler,盯着Batch Count…

2026/10/14 8:52:31 阅读更多 →
Flutter在OpenHarmony上的家庭健康应用开发实践

Flutter在OpenHarmony上的家庭健康应用开发实践

1. 项目概述最近在OpenHarmony平台上用Flutter开发了一款家庭健康管理应用,主要包含两大核心功能模块:家庭药箱管理和体重记录。这个项目让我深刻体会到Flutter在跨平台开发中的优势,特别是在新兴的OpenHarmony生态中的适配表现。作为开发者&…

2026/10/14 8:52:31 阅读更多 →
PS5游戏兼容层技术解析:系统调用翻译与图形API转换实战

PS5游戏兼容层技术解析:系统调用翻译与图形API转换实战

1. 这个项目到底在解决什么问题 第一次看到“让PS5游戏跑在PC上”这个说法,我第一反应是:又来了,每隔一段时间就会有类似的标题冒出来。但点进去仔细看完这个17.2K Star的项目之后,我发现它跟以前那些“模拟器”路子完全不一样&am…

2026/10/14 8:51:30 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →