新闻详情

新闻详情

首页 / 资讯中心 / 详情

HTTP请求与应答-URL全网唯一文件路径报文结构与短连接

发布时间:2026/10/2 16:57:24来源:尧图网络
HTTP请求与应答-URL全网唯一文件路径报文结构与短连接
HTTP 请求与应答URL 全网唯一文件路径、报文结构与短连接我的github(https://github.com/xcx55/ubuntu-linux-project)感谢各位大佬参观我的github源笔记http226-9-8、http4-别人的应用层协议26-9-11、http5 请求报文结构26-9-12、字节流数据包两个的区别上一篇认识了 HTTP 的名字和 DNS这一篇拆它的真身一个 URL 到底由什么组成、请求和应答报文长什么样、HTTP 请求的本质为什么是发文件。手搓协议攒下的眼光全用上了——协议发来发去就是一个有结构的字符串。一、URL 完整拆解全网唯一文件路径一个完整的 URL 长这样http://user:passwww.example.jp:80/dir/index.htm?uid1#ch1 └─协议┘└─登录信息─┘└──服务器地址──┘└┘└─文件路径─┘└查询┘└片段┘ 方案名 (认证一般省略) 端口号 带层次 字符串 标识符逐段看协议方案名http或https登录信息认证user:pass——一般省略不写服务器地址域名或 IP服务器端口号一般服务端 HTTP 协议绑定的端口号都是80默认省略带层次的文件路径/dir/index.htm查询字符串?uid1传参用的片段标识符#ch1。网页的本质就是一个文件学了前端就知道网页的本质就是一个文件申请网页就是申请文件。那么怎么保证找到对应主机的这个文件靠 Linux 的老朋友——文件路径前面依靠 IP 地址 隐藏端口号定位主机主机内靠路径定位文件。串起来ip 唯一 → port 主机唯一 → 主机内路径唯一 → HTTP 本质全网唯一的文件路径所以 HTTP 协议的本质就是 IO。给资源就是给 URLURL 后面那一串本质就是 IO。URL 与 URIURL统一资源定位符——定位就是能找到它笔记里的比方学号可以唯一定位到一个学生学号就可以叫做 URLURI统一资源标识符——标识范围更宽URL 本身就是 URI。URL 传参与特殊符号编码想给服务器传参就是URL 传参——百度搜索框里敲的内容全被拼进了搜索路径?wdnew%20year...。约束来了URL 传参传的东西不能干扰对 URL 的解析但又必须传参。怎么办对特殊符号、/、.、空格等进行编码——比如空格变%20。你搜索时 URL 里那串乱码就是这么来的。二、两个视角结构体还是字符串同一个 HTTP 协议两个视角看它发送者客户端视角HTTP 协议是一系列结构体进行封装和 JSON 加包——封装过的结构体资源数据Kv 直接 k、v 序列化组合接收者服务端视角HTTP 协议是一种具有层次的 string以\n为分隔符。而 HTTP 的一个独特点它是以行为单位、不依赖任何第三方库的协议没有使用 JSON。为什么不用 JSON降低用户使用 HTTP 的成本——不用引库拿到的就是纯文本行string 拆分就能解析。三、读取完整性又是那个 while 循环TCP 是面向字节流的发来的数据数量未知、断断续续、发送和接收次数不匹配——不像 UDP面向数据报面向信件发来三封就得到三封消息天然完整。所以 HTTP 的接收方必须自己回答两个问题1、怎么保证读取完整2、怎么反序列化答案和手搓协议时一模一样必须读取到\r\n空行否则 break——TCP 协议再次读取while 循环直到读取成功读取完整的保证就是靠报头的循环应用层的完整反序列化你自己都知道——string 的拆分。第一层攒字节、第二层切报文手搓len\r\n value \r\n时练的两层循环咬合在 HTTP 里原样复现。四、请求报文请求行 报头 空行 正文HTTP REQUEST ┌────────────────────────────────────────┐ │ 请求行: 请求方法 空格 URI 空格 HTTP版本 换行符 │ ← GET /a/b/c.html HTTP/1.1 ├────────────────────────────────────────┤ │ 请求报头: Key:[空格]Value 换行符 │ ← 一行一条可有多条 │ Key:[空格]Value 换行符 │ │ ... │ ├────────────────────────────────────────┤ │ 空行: 换行符 ← 必须 │ ├────────────────────────────────────────┤ │ 请求正文: DATA ← 可选的 │ └────────────────────────────────────────┘请求行的三个字段请求方法一般就两种——GET一般是获取和POST一般是上传URIip 和端口以及路径——找到唯一主机的唯一文件HTTP 版本最常用 http1.1。注意携带的是客户端的 HTTP 版本。为什么协议要有版本想想 App 怎么知道软件需要更新——版本被以配置文件的方式记录下来。用版本检测可以规避问题、新增不同的功能、支持不同的功能。报头与空行报头是Key: Value结构一行一个装的是本次 client 需求的信息和服务端的相对信息Host、Connection、User-Agent、Cookie 等等。报头和正文之间依据空行隔开——这个空行就是上一节读到\r\n才算完整的那个\r\n也是报头结束的标志。分割报文还是尽量先广度后局部先按空行切出报头和正文再按行拆报头最后按结构拆请求行。一个真实的请求POST http://job.xjtu.edu.cn/companyLogin.do HTTP/1.1 Host: job.xjtu.edu.cn Connection: keep-alive Content-Length: 36 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) ... Cookie: JSESSIONIDD628A75845A74D29D991DB47A461E4FC; ... usernamehgtz2222password222222222登录场景正文里带着账号密码这就是 POST 上传报头里 Content-Length 告诉你正文多长Cookie 带着会话状态。五、应答报文状态行是灵魂HTTP 不像我们的自定义协议那样 request 和 response 共用一套格式——它的请求和应答是不一样的回想网络计算器去是size两个数操作回来是size一个结构体格式本来就允许不同。HTTP 做了更高级的封装前字符串进行了统一但应答有应答自己的行。HTTP RESPONSE ┌────────────────────────────────────────┐ │ 状态行: HTTP版本 空格 状态码 空格 状态码描述 换行符 │ ├────────────────────────────────────────┤ │ 响应报头: Key:[空格]Value 换行符 │ ├────────────────────────────────────────┤ │ 空行: 换行符 │ ├────────────────────────────────────────┤ │ 响应正文: DATA视频/文件/文章/css/js 等不同类型文件│ └────────────────────────────────────────┘状态行HTTP 版本这次是httpserver 的版本 状态码 状态码描述状态码但凡网络还在、客户端发出来了请求server 必须回复应答——请求出错了怎么办比如404 NOT FOUND。依据 server 的状态码客户端为用户或者 server 采取措施状态码描述对状态码的描述人类可以识别的文字404 和 NOT FOUND 一起表示请求状态。六、HTTP 请求的本质把 Linux 目录下的文件发给客户端把所有封装拆掉看到底HTTP 超文本请求的本质起始就是通过网络服务器把 Linux 机器上特定目录下的文件以 http 应答的方式返回给 client浏览器或者 app。server 端源代码的地方就是根目录的地方一般来说我们请求直接写www.xxx.com/后面是客户端主动加上index.html这个文件名——你不写文件名浏览器帮你补默认首页前端就是这样的客户端的东西解析得太多了帮我们进行一系列复杂的请求或者写入数据。短连接浏览器 ── HTTP request ──→ 服务器 浏览器 ←── HTTP response ── 服务器 │ close短连接 浏览器拿到应答后进一步处理一次 request 一次 response服务器就 close——这就是 HTTP无连接特性的体现每次请求都要建立新的连接。七、依样画葫芦写一个仿 HTTP 的自定义协议请求和应答的轮廓都齐了笔记里的原话“依据这个就可以仿照这个写自定义协议了”——Response 报文和 request 报文都是不同的就是字符串的格式不相同请求行/状态行 Kv 报头 空行 正文四段式骨架照搬内容自己定。手搓协议的功课到这里就能照着 HTTP 抄作业了。总结URL 协议 服务器地址(端口 80) 文件路径 查询字符串HTTP 本质 全网唯一文件路径网页就是文件URL 就是传参特殊符号必须编码空格 →%20才不干扰解析HTTP 以行为单位、不依赖第三方库发送者看是结构体序列化接收者看是层次字符串面向字节流 → 必须循环读到\r\n才算完整空行是报头与正文的分界请求行方法(GET/POST) URI 版本应答状态行版本 状态码 描述server 必须应答HTTP 请求本质 把服务器 Linux 特定目录的文件返回给客户端默认补index.html一问一答即短连接。下一篇换个视角往上爬为什么需要协议、协议栈为什么叫栈、IP 和 MAC 各管什么——把网络分层再往下捅一层。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

3D重建落地实战:工业质检、医疗导航与数字孪生的硬核路径 2026/10/2 19:06:09

3D重建落地实战:工业质检、医疗导航与数字孪生的硬核路径

1. 为什么“3D重建的相关应用(六)”这个标题值得单独成篇? 很多人看到“3D重建的相关应用(六)”第一反应是:又一篇泛泛而谈的综述?不,这恰恰是行业进入深水区的信号——它不是第六次…

阅读更多 →
华为HMS Engine:Windows原生运行安卓App的原理与实践 2026/10/2 19:06:02

华为HMS Engine:Windows原生运行安卓App的原理与实践

1. 为什么Windows原生跑安卓App不再是“玄学”——华为移动应用引擎的真实定位 你有没有试过在Win10或Win11上双击一个.apk文件,结果弹出“无法打开此文件”的提示?或者搜到一堆“Win10装安卓模拟器”的教程,下载完BlueStacks、LDPlayer、MuM…

阅读更多 →
PHP8.0怎么实现跨操作系统的文件路径处理 2026/10/2 19:05:25

PHP8.0怎么实现跨操作系统的文件路径处理

前言跨平台路径处理的典型事故现场:开发在 Windows 上写代码,测试环境是 Linux,打包上线后读取缓存目录失败,报 failed to open stream: No such file or directory,但路径打印出来看「明明是对的」。或者反过来&#…

阅读更多 →
C语言入门第一天:环境搭建、基础语法与经典练习题全攻略 2026/10/2 19:05:25

C语言入门第一天:环境搭建、基础语法与经典练习题全攻略

1. 第一天学C语言,到底先学什么如果你今天刚把C语言列入学习计划,相信我,你并不孤单。搜一下“C语言”就能看到一大堆人在问“C语言基础”“C语言入门”“C语言常见错误”这些词,这说明每年都有成千上万的人坐到你现在的这个位置。…

阅读更多 →
Laya开源模型实战:用LoRA微调打造System 1快速决策能力 2026/10/2 19:05:25

Laya开源模型实战:用LoRA微调打造System 1快速决策能力

最近在帮业务方选型决策类模型,正好赶上 Laya 在 GitHub 上冲到 17K Star,社区里到处都是“爆打 Jev”的讨论。我也花了一个周末把 Laya 从安装到微调完整跑了一遍,落地任务是让模型具备 System 1 快速决策能力。这篇文章就是这次实战的完整记…

阅读更多 →
Codex Cloud执行沙箱:让AI真正操作计算机的底层架构 2026/10/2 19:05:24

Codex Cloud执行沙箱:让AI真正操作计算机的底层架构

1. 这不是一次普通升级:Codex Cloud 重构代码生成的底层逻辑最近在几个技术社区刷到“OpenAI 推出新版 Codex Cloud,Agents API 开放预览并支持 computer use”这条消息,不少朋友第一反应是:“又一个API更新?不就是把老…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉