# 第一章 浏览器生成消息——探索浏览器内部

TIP

应用程序并不是自己去控制网络,而是委托操作系统来控制网络。

# 1.1 生成 HTTP 请求消息

# 1.1.1 探索之旅从输入网址开始

在介绍浏览器的工作方式之前, 让我们先来介绍一下网址。 网址, 准确来说应该叫 URLB, 如果我说它就是以 http:// 开头的那一串东西, 恐怕大家一下子就明白了, 但实际上除了“http:”, 网址还可以以其他一些文字开头, 例如“ftp:”“file:”“mailto:” C 等。

# 1.1.2 浏览器先要解析 URL

浏览器要做的第一步工作就是对 URL 进行解析, 从而生成发送给 Web服务器的请求消息。

# 1.1.3 省略文件名的情况

我们会在服务器上事先设置好文件名省略时要访问的默认文件名。 这个设置根据服务器不同而不同, 大多数情况下是 index.html 或者 default.htm 之类的文件名。

# 1.1.4 HTTP 的基本思路

HTTP使用一种请求-响应模型,即客户端发送一个请求(Request)到服务器,服务器处理该请求并返回一个响应(Response)。这种模式使得客户端和服务器之间的通信非常清晰和简单。

# 1.1.5 生成 HTTP 请求消息

# 1.1.6 发送请求后会收到响应

# 1.2 向 DNS 服务器查询 Web 服务器的 IP 地址

# 1.2.1 IP 地址的基本知识

生成 HTTP 消息之后, 接下来我们需要委托操作系统将消息发送给 Web 服务器。 尽管浏览器能够解析网址并生成 HTTP 消息, 但它本身并不 具备将消息发送到网络中的功能, 因此这一功能需要委托操作系统来实 现 A。

# 1.2.2 域名和 IP 地址并用的理由

让人来使用名称, 让路由器来使用 IP 地 址。 为了填补两者之间的障碍, 需要有一个机制能够通过名称来查询 IP 地 址, 或者通过 IP 地址来查询名称, 这样就能够在人和机器双方都不做出牺 牲的前提下完美地解决问题。 这个机制就是 DNSA。

# 1.2.3 Socket 库提供查询 IP 地址的功能

# 1.2.4 通过解析器向 DNS 服务器发出查询

# 1.2.5 解析器的内部原理

# 1.3 全世界 DNS 服务器的大接力

# 1.3.1 DNS 服务器的基本工作

# 1.3.2 域名的层次结构

# 1.3.3 寻找相应的 DNS 服务器并获取 IP 地址

# 1.3.4 通过缓存加快 DNS 服务器的响应

# 1.4 委托协议栈发送消息

# 1.4.1 数据收发操作概览

# 1.4.2 创建套接字阶段

# 1.4.3 连接阶段:把管道接上去

# 1.4.4 通信阶段:传递消息

# 1.4.5 断开阶段:收发数据结束