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:请求报文到底长什么样,以及浏览器和服务器之间那些约定好的细节。

相关推荐
feng_you_ying_li17 小时前
linux之数据链路层
linux·网络·智能路由器
国科安芯20 小时前
人在回路中的总线:商业空间站环境控制与生命保障系统CANFD网络的可靠性与功能安全
网络·嵌入式硬件·安全·架构·php·抗辐射
国科安芯21 小时前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天
wdeok21 小时前
Socket编程UDP-简单的聊天室
网络·网络协议·udp
Thanks_ks1 天前
HTTP 请求方法与 RESTful 接口设计:GET 和 POST 到底怎么用
http·api·restful·状态码·get·post·接口设计
QXWZ_IA1 天前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
wdeok1 天前
Socket编程Tcp
服务器·网络·tcp
xiaoye-duck2 天前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
无足鸟ICT2 天前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络
坤坤子吖2 天前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习