第1步,从在浏览器中输入网址开始:
- 首先网址就是URL,通常是访问web服务器,用”http:”,即HTTP协议
- URL的格式会随着协议的不同而不同
- URL的各种格式如下:
- 访问Web服务器或FTP服务器时,URL包括域名和文件路径名,有时还会包含用户名和密码和服务器端口号
第2步,浏览器对URL进行解析
对URL解析也就是对URL进行拆分,拆分结果如下:
- 还有URL中省略文件名的特殊情况,甚至最后不以/结尾,将会直接访问服务器中设置的默认文件
第3步,根据解析信息来生成HTTP请求消息
HTTP方法最常用的就是GET和POST:
- 在地址栏中输入网址并显示网页,因此这里应该使用 GET 方法
- 点击超级链接的场景中也是使用 GET 方法
- 如果是表单,在 HTML 源代码中会在表单的属性中指定使用哪种方法来发送请求,可能是 GET也可能是POST
生成HTTP请求消息的格式:
怎么生成HTTP请求消息:
- 第1步,写好方法,是GET还是POST,加一个空格
- 第2步,写URI,即文件和程序的路径名,直接从URL中提取出来即可,再加一个空格,写HTTP版本
- 第3步,第二行开始写消息头,存放请求的额外信息,如日期,客户端支持的数据类型,软件名称和版本等等
- 第4步,空一行,写消息体。GET方法不需要写消息体,POST方法把表单中的信息写上
生成结果如下:
第4步,生成请求消息后,向DNS服务器查询Web服务器的IP地址
虽然浏览器能生成解析地址生成HTTP请求消息,但是浏览器不能发送消息到网络,需要委托操作系统来做
IP地址原理
子网:
由集线器连接起来几台计算机,看成一个单位
网络:
把子网用路由器连起来形成网络
IP地址:
- 网络中所有的设备都被分配一个地址,由网络号、主机号组成
- 通过IP地址可以判断出访问服务器的位置,从而发送消息
消息发送过程:
发送者的消息先通过子网的集线器发送到最近的路由器上,路由器根据目的地判断并发送到下一个路由器,然后再经过子网的集线器发到下一个路由器,直到发送到目的地
为什么要查询IP地址?
因为发送消息需要的不是域名,而是域名对应的IP地址
怎么向DNS服务器查询IP地址?
- 首先操作系统上有DNS客户端,客户端里有Socket库的DNS解析器
- 需要查询IP地址时
- 第1步,浏览器会调用操作系统的解析器,解析器委托操作系统的协议栈通过网卡向DNS服务器发送查询消息,然后DNS会返回响应消息
- 第2步,响应消息通过协议栈传递给解析器,解析器会取出响应消息中的IP地址,并写入浏览器指定的内存地址中
- 解析器程序如下:
第5步,委托操作系统的协议栈向目标IP服务器收发HTTP消息
基本原理:
- 首先收发消息操作之前,先要建立一条管道连接双方。管道两端的数据出入口叫套接字,所以先创建套接字
- 然后通过套接字连接起来形成管道
- 这些步骤都是委托协议栈完成的
第1步,收发消息的准备工作:
- 首先服务器创建套接字,等待客户端创建套接字并返回描述符
- 协议栈根据描述符、IP地址、端口号判断哪个套接字和哪个服务器的哪个套接字进行连接管道,连接后就完成了准备工作
- 原理:描述符是用来在一台计算机内部识别套接字的,端口号就是用来识别服务器的套接字的
- 传输完成后任何一方断开管道,通信就结束,套接字将删除
第2步,收发HTTP消息
- 发送消息:调用write程序组件并指定套接字和HTTP消息(需要发送的数据),协议栈就会发送数据到服务器
- 服务器响应消息:
- 接收消息:调用read程序组件并指定消息存放内存地址,协议栈就会接收数据到接收缓冲区
第3步,断开连接
服务器首先断开连接,传达到客户端后,客户端套接字也会断开,浏览器调用read后会得知通信结束,浏览器也会断开