HTTP起步-URL域名解析与协议的本质

HTTP 起步:从手搓协议到超文本传输------URL、域名与 DNS

我的github:(https://github.com/xcx55/ubuntu-linux-project)

感谢各位大佬参观我的github!!

源笔记:http1(26-9-7)

前几篇我们手搓了一个应用层协议------JSON + \r\n。搓完再抬头看:HTTP 也是一个应用层协议,只不过不是我们定的,而是大佬们早就定义好、非常常用、供我们直接参考使用的现成协议。手搓的意义在这一刻兑现:有了亲手搓协议的经验,再看 HTTP 就不是背报文格式,而是"哦,原来这里是这样约定的"。

一、HTTP 是什么:超文本传输协议

HTTP,HyperText Transfer Protocol ,超文本传输协议。它定义了客户端(比如浏览器)与服务器之间如何通信,以交换或传输超文本(比如 HTML 文档)。

HTTP 协议是客户端与服务器之间通信的基础:客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。

三个关键词先钉死:

  • 无连接、无状态:每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息;
  • 明文传输 :HTTP 传输数据不会加密,HTTPS 才会进行加密------协议之间的差异,往往就是加密方式与轻便程度的取舍(笔记原话:协议是加密方式的不同于轻易程度);
  • 客户端知道的,服务端肯定知道:双方对报文格式的约定必须完全一致,这一点和手搓协议时一模一样。

二、URL:给你一个链接,就是给你一个资源

一般我们给同学分享资源,就是传过去一个链接------这个链接(资源)就是 URL。

拿一个真实的 URL 拆开看:

复制代码
https://www.baidu.com/s?wd=new%20year&...&ie=utf-8
└─协议┘└────域名────┘└路径┘└────────参数────────┘
  • https://:用什么协议通信;
  • www.baidu.com:访问的域名;
  • 后面一长串 ?wd=...:请求的参数(搜索词、编码方式等等)。

URL 就是互联网世界的"资源地址",HTTP 的一切工作,都围绕"把 URL 对应的资源从服务器搬到浏览器"展开。

三、域名与 IP:计算机只认 IP,人类只记域名

先说一个冷酷的事实:访问目标服务器,永远只能用 IP 地址,因为计算机只认 IP 。浏览器里的 1.2.3.4 才是真正被拨号的目标。

那为什么我们平时从来不输 IP,输的都是 www.xxxx.com 这种域名?笔记里的回答:

  • 域名就是浏览器使用的入口,浏览器喜欢使用域名;
  • 直接用 IP 不行吗?行,但不方便人类的理解 ------域名对人友好,转换后适用于计算机;
  • 这是物联网产品化的特点:产品要给人用,就得迁就人的记忆方式。

一句话总结:域名,就是 IP 的化身。

四、DNS:把域名翻译回 IP 的那一步

既然计算机只认 IP,那浏览器发起请求之前,必须先把域名变回 IP。将域名转换为 IP 的工作,叫做域名解析(DNS) ,干这个活的机器叫域名解析服务器。

完整的访问流程就变成了这样:

复制代码
浏览器                          域名解析服务器              目标服务器(1.2.3.4)
  │                                    │                          │
  │── DNS查询: www.baidu.com 是哪个IP? ─→│                          │
  │←────── 返回: 1.2.3.4 ──────────────│                          │
  │                                                │                │
  │──────────── HTTP request ──────────────────────→│               │
  │←─────────── HTTP response ──────────────────────│               │
  • 浏览器想要和服务端发起请求,就要先得到 IP:把域名转换为 IP 的工作先交给域名解析服务器,再传回来------这个工作就叫 DNS;
  • 域名解析服务器的 IP 地址一般为 8.8.8.8(笔记里浏览器旁边记的这串数字就是它)。

谁提供域名解析?根域名服务器

那域名解析这件事,一般是谁提供的?------根域名服务器 。而且解析是有层级、可以逐级向上的:一个找不到,就以 UDP 协议向上查找(DNS 查询本身跑在 UDP 上,轻量、快、一次问一次答)。

这带出一个脆弱性:要是一个根域名解析服务器自己关闭了,就可能导致无法上网------除非你懂行,直接用 IP 访问,跳过整个翻译环节。

五、协议观的升级

手搓协议 → 学 HTTP,最大的收获不是记住 HTTP 有哪些字段,而是验证了一个方法论:

协议,本质就是双方的约定。约定的内容可以是报文格式(JSON 还是报文头),可以是加密方式(HTTP 明文还是 HTTPS 加密),可以是传输方式(无连接还是有连接)。谁定义协议,谁就定义了客户端和服务端如何对话。

我们自己搓的 len\r\n value \r\n 和 HTTP 的报文格式,在"约定"这个层面上是平等的民族------区别只在于一个是我们自己定的,一个是全世界公认的。

总结

  • HTTP = HyperText Transfer Protocol,定义客户端与服务器如何通信;无连接、无状态、明文(HTTPS 才加密);
  • URL 是资源的地址:协议 + 域名 + 路径 + 参数;给链接就是给资源;
  • 计算机只认 IP,域名是为了对人友好------域名就是 IP 的化身,这是产品化的妥协;
  • DNS 把域名翻译回 IP:浏览器先问域名解析服务器(常见 8.8.8.8),根域名服务器逐级向上查(UDP),根服务器挂了可能全网上不了;
  • 协议 = 约定:格式、加密、传输方式,都是约定的不同侧面。

下一篇继续拆 HTTP:请求报文到底长什么样,以及浏览器和服务器之间那些约定好的细节。

相关推荐
Escalating_xu9 小时前
【Linux 网络编程】connect 的断线重连:用状态机写一个能恢复连接的 TCP 客户端
linux·网络·tcp/ip
2401_8685347811 小时前
局域网络中信息安全方案设计及攻击防范技术(制造企业园区网)
服务器·网络
懂点Tech12 小时前
ctfshow MISC入门图片篇(信息附加):misc21解题思路
网络
CS_Zero12 小时前
计算机网络通信基础2:带宽和吞吐量、客户端和服务器、网络基础设施
网络·计算机网络
盛世宏博智慧档案12 小时前
算力机房多协议融合:Modbus TCP 温湿度变送器与 SNMP 设备混合组网方案
网络·网络协议·tcp/ip·传感器·温湿度
严谨的麻辣烫13 小时前
静态代理 IP 的出口一致性如何验证?Python 请求检测与异常排查
开发语言·python·http·网络安全
知识分享小能手13 小时前
C学习教程,从入门到精通,C语言文件 — 完整知识点详解(14)
c语言·网络·学习
zhuhai_xigedian13 小时前
源网荷储一体化柜通信层:网络架构与协议矩阵设计
网络·矩阵·架构
shiyi.十一13 小时前
【CISP教材】第9知识域:计算环境安全
网络·安全·cisp
物联网软硬件开发-轨物科技13 小时前
【轨物方案】深度解读开关柜智能感知及一键顺控专家系统
大数据·运维·网络·人工智能·算法·机器人