《图解HTTP》学习笔记
书籍信息 :《图解HTTP》作者:上野宣,译者:于均良
出版社:人民邮电出版社,2014年5月第1版
说起来你可能不信,每天刷手机、看视频、点外卖,背后全靠一个叫 HTTP 的协议在跑腿。它就像互联网的快递小哥------你下单,它送货,风雨无阻。但这位小哥是怎么工作的?他背后还有哪些"同事"帮忙?今天咱们就从最底层开始,把 Web 的家底翻个底朝天。
第1章 了解Web及网络基础
📌 核心知识点
- HTTP协议的角色:Web建立在HTTP(HyperText Transfer Protocol,超文本传输协议)之上,客户端通过HTTP协议向服务器请求资源,服务器返回响应。Web浏览器等请求方称为客户端(client)。
- HTTP的诞生与发展 :
- 1989年,CERN的蒂姆·伯纳斯-李(Tim Berners-Lee)博士提出WWW构想,旨在实现研究者之间的知识共享。
- WWW构建的三大核心技术:HTML(页面标记语言)、HTTP(文档传递协议)、URL(文档地址定位)。
- HTTP版本演进:HTTP/0.9(1990年问世,未正式标准化) -> HTTP/1.0(1996年,RFC1945) -> HTTP/1.1(1997年,RFC2616,当前主流版本)。
- TCP/IP协议族 :互联网在TCP/IP协议族基础上运作,HTTP是其子集。TCP/IP按层次分为4层:
- 应用层:决定向用户提供应用服务时的通信活动(HTTP、FTP、DNS等)。
- 传输层:提供两台计算机之间的数据传输(TCP、UDP)。
- 网络层:处理网络上流动的数据包,选择传输路径(IP协议)。
- 链路层:处理连接网络的硬件部分(网卡、光纤等物理可见部分)。
- TCP/IP通信传输流:发送端从应用层往下走,接收端从链路层往上走。每经过一层会加上该层首部信息(封装),接收端逐层去掉首部。
- IP协议:位于网络层,负责将数据包传送给对方。依赖IP地址(节点分配地址)和MAC地址(网卡固定地址)。使用ARP协议根据IP地址反查MAC地址。传输过程类似快递公司中转,没有任何设备能全面掌握互联网传输细节。
- TCP协议 :位于传输层,提供可靠的字节流服务。通过三次握手(three-way handshaking)确保数据可靠送达:SYN -> SYN/ACK -> ACK。
- DNS服务:位于应用层,提供域名到IP地址的解析服务。用户使用易记的域名访问,DNS将其解析为计算机能理解的IP地址。
- URI与URL :
- URI(Uniform Resource Identifier,统一资源标识符):由协议方案表示的资源的定位标识符。
- URL(Uniform Resource Locator,统一资源定位符):表示资源的地点,是URI的子集。
- 绝对URI格式:
协议方案名://登录信息@服务器地址:端口号/文件路径?查询字符串#片段标识符
- RFC(Request for Comments):HTTP协议的技术标准文档,不遵照RFC标准实现可能导致无法通信。但某些应用因用户量大也可能形成事实上的"标准"。
💻 实践用例
1. 使用nslookup/dig查看DNS解析过程
bash
# 查询域名的IP地址
nslookup www.example.com
# 使用dig查看更详细的DNS解析信息
dig www.example.com
# 反向解析:通过IP地址查询域名
nslookup 93.184.216.34
2. 使用curl查看HTTP请求和响应的完整过程
bash
# 发送HTTP请求并查看完整的请求/响应头(包括TCP/IP各层信息)
curl -v http://www.example.com/
# 仅查看响应头
curl -I http://www.example.com/
3. 使用ping和traceroute理解IP传输与路由选择
bash
# 查看目标IP是否可达(ICMP协议)
ping www.example.com
# 追踪数据包到达目标经过的路由节点(理解路由选择机制)
traceroute www.example.com
4. 使用arp命令查看ARP缓存表(IP地址与MAC地址的对应关系)
bash
# 查看本机的ARP缓存表
arp -a
# 解析URI各组成部分
# 以 http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1 为例:
# 协议方案名: http
# 登录信息: user:pass
# 服务器地址: www.example.jp
# 端口号: 80
# 文件路径: /dir/index.htm
# 查询字符串: uid=1
# 片段标识符: ch1
📝 学习笔记
- 分层思想是网络设计的核心:TCP/IP的分层设计使得各层可以独立演进,修改某一层不影响其他层。这和软件工程中的分层架构思想一致,理解这一点对后续学习微服务、API网关等概念很有帮助。
- TCP三次握手是面试高频考点:SYN -> SYN/ACK -> ACK,核心目的是确保双方都具备收发能力。可以类比为打电话:A说"你能听到吗"(SYN),B回答"我能听到,你能听到吗"(SYN/ACK),A再回答"我也能听到"(ACK)。
- IP与MAC地址的区别:IP地址是逻辑地址,可变更(类似门牌号);MAC地址是物理地址,基本不变(类似身份证号)。ARP协议是连接两者的桥梁。
- DNS是互联网的"电话簿":没有DNS,用户将不得不记忆纯数字的IP地址。在实际开发中,DNS解析延迟是影响首次请求速度的重要因素,CDN和DNS预解析等技术都是为了优化这一环节。
- URI不等于URL :URL是URI的子集。URI是标识符(Identify),URL是定位符(Locate)。例如
urn:isbn:0451450523是URI但不是URL。日常开发中两者常混用,但严格区分有助于理解RESTful API设计。
好了,TCP/IP 四层模型、三次握手、DNS 解析......这些概念是不是听着就头大?别急,第一章本来就是打地基的,后面会越来越有意思。记住一句话就行:互联网就是一个巨大的快递系统,每个协议都是其中一环。下一章我们就来看看这位"快递小哥"HTTP 具体是怎么送包裹的。