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

相关推荐
智能化咨询1 小时前
(110页PPT)酒店智能化设计方案(附下载方式)
网络
ControlRookie1 小时前
第27篇_综合排障|从现象反查状态、错误码、指标和连接快照
http·codesys·plc通信
重生之高冷汉堡包2 小时前
IPv4 与 IPv6:主要区别及选择哪个
网络·智能路由器
高升说2 小时前
深度相机接口选型:MIPI、USB3 与 GigE 的带宽估算与工程取舍
网络·人工智能·数码相机
成为深度学习高手2 小时前
DAG:沿时间与通道双相关建模的外生变量时序预测
网络·人工智能·深度学习·算法·机器学习·数据挖掘·时序数据库
wdfk_prog3 小时前
Wi-Fi Direct 教程 05:control socket 与 eloop——P2P_FIND 怎样进入 wpa_supplicant 命令解析器
运维·服务器·后端·网络协议·ubuntu·p2p·wifi-direct
艾莉丝努力练剑3 小时前
【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现
java·开发语言·网络·c++·人工智能·学习·sdk
易天ETU3 小时前
PCB与AI浪潮的关联性《补充篇》
网络·人工智能·光模块·光通信·易天光通信
Zenova EdgeOS4 小时前
工业网关心跳机制实战:Keepalive、应用层探活与健康判定
服务器·网络·数据库