浏览器生成信息

关键词:浏览器,Web服务器,网址(URL),HTTP,HTML,协议,URI,请求消息,解析器,Socket库,DNS服务器,域名

  • 浏览器的具体工作步骤是:
  1. 解析URL(注意这个“解析”跟解析器没有关系)
  2. 生成HTTP请求消息
  3. 向DNS服务器查询域名对应的ip地址
  4. 委托操作系统内部的协议栈将消息发送给Web服务器,按照指定的顺序来调用Socket库中的程序组件。
一、输入URL,浏览器解析网址
1、统一资源定位器 URL
  • 浏览器:具备多种客户端功能的综合性客户端软件

  • FTP:文件传输协议

  • 域名:像www.glasscom.com这样用句点(.)分隔的名称

  • URL:统一资源定位器

    • 功能:不同的头,可以用以判断使用哪种功能。访问Web服务器的时候,用“http”,访问FTP服务器的时候用“ftp:“

    • 格式:协议(http:,ftp:,file:,mailto:,)//服务器名称+数据源路径

      ![Web浏览器解析URL的过程](/images/2024-07-24-22-38-54-Web浏览器解析URL的过程.jpg) - Web服务器和FTP服务器:
      • 用http协议访问Web服务器:http://用户名(可省略):密码(可省略)@Web服务器域名:端口号(可省略)/文件的路径名

        1
        http://user:password@www.glasscom.com:80/dir/file.html
      • 用FTP协议下载和上传文件:ftp://用户名(可省略):密码(可省略)@FTP服务器域名:端口号(可省略)/文件的路径名

        1
        ftp://user:password@ftp.glasscom.com:21/dir/file/html
      • 服务器读取客户端本地文件:file://计算机名(可省略)/文件路径名

        1
        file://localhost/c:/path/file1.zip
      • 发送邮件的URL:邮件地址

        1
        mailto:tone@glasscom.com
    • 省略文件名情况:

      比如http://www.lab.glasscom.com/dir/预先在dir文件夹下设置省略时访问的默认文件名,一般是index.html或者default.html,遇到这种情况直接访问默认页面

2、浏览器解析HTTP协议的URL
  • HTTP协议

    HTTP的基本思路
    功能:定义了客户端和服务器之间的交互

    请求信息包括:”对什么“(URI,统一资源标识符)+“进行怎样的操作”(访问方法,包括GET方法,POST方法等)

    • URI:访问的各种目标,可以是一个网页数据文件名(html文件),也可以是一个CGI程序(Web服务器调用其他的程序)

    • GET方法:URI指定的是文件返回文件;URI指定的是CGI程序,返回输出结果

    • POST方法:向服务器发送数据,此时URI一般指向一个应用程序的文件名

    • HEAD方法:用于获取文件最后更新时间

    HTTP的主要方法

    • 注:超链接主要是GET方法,表单有POST也有GET

    返回消息是状态码

    HTTP状态码概要

二、生成HTTP请求消息

HTTP消息

  • 请求消息

    请求行(方法 URI HTTP版本)+消息头(请求附加信息)+消息体(POST方法消息体内有表单数据)

  • 响应消息

    状态行(HTTP 状态码 响应短语)+消息头+消息体(从文件中读取的数据orCGI程序的输出数据)

    • 状态码和响应短语表示内容一致,用途不同,状态码是一个数字,用来像程序告知执行结果;响应短语是文字,向人们告知执行结果。
  • 每条请求消息只能写一个URI,所以最多只能获取一个文件。当网页包含图片时,会在网页相应位置嵌入图片标签,屏幕上会预留显示图片的空间,然后再次访问Web服务器请求图片。

    所以,一个网页包含3张图片,一共要向Web服务器发送4条请求

三、向DNS服务器发起 查询 Web服务器的IP地址 请求
1、IP地址

需求:在委托操作系统发送消息时,需要提供通信对象的IP地址。所以需要根据域名查询IP地址。(如果Web服务器采用了虚拟主机功能,可能无法通过IP地址访问)

局域网是基于TCP/IP结构设计的,小的子网通过路由器组成一个大的网络

IP基本思路

  • IP地址(一共32bit)

    定义:网络号+主机号(xx栋+xx室)

  • 子网掩码:与IP地址等长,左半边全是1,右半边全是0,用以区分网络号和主机号

IP地址的表示方法

  • 例如:10.11.12.13/255.255.255.0表示网络号是10.11.12,主机号是13

    若为10.11.12.13/24,则表示子网掩码前24位为1

    IP地址结构

  • 特殊情况:主机号比特全为0,表示代表整个子网。主机号比特全为1,表示对整个子网每个主机进行广播

2、Socket库提供查询功能,解析器向DNS服务器发起查询
  • Socket库:可以让其他应用程序调用操作系统网络功能的库。

  • 解析器(DNS解析器,DNS客户端):是一段程序,包含在Socket库中,通过DNS查询IP地址的操作是 域名解析

    • 解析器工作过程:一行代码内存地址=gethostbyname('域名')

    gethostbyname

    • 解析器工作的内部原理:

      1.当网络应用程序(浏览器)调用解析器时,程序的控制流程就会转移(原程序暂停,被调用的程序运行)到解析器内

      2.解析器会生成发送给DNS服务器的查询消息,这个过程与生成要发送给Web服务器的HTTP请求类似。

      3.之后委托给操作系统内部的协议栈来执行发送功能,协议栈执行发送消息操作网卡将消息发送给DNS服务器。

      4.之后按照上述相反的过程层层返回

      解析器内部原理

    • 注意:与发送其他消息不同的是,我们的终端预先已知DNS服务器的IP地址,不需要再去查询

四、DNS查询到 Web服务器地址 的过程
  • DNS服务器的功能:

    接收来自客户端的查询消息,然后根据消息内容返回IP地址

  • 解析器(DNS终端)向DNS服务器发送的查询消息包括:

    • 域名(服务器名称,邮件服务器名称(即邮件地址中@之后的部分,不是邮件服务器的域名))

    • Class(始终为IN)

    • 记录类型(A对应记录得到的是IP地址,MX对应记录得到的是邮件服务器)

    解析器与DNS服务器交互
    注:当记录类型为MX时,DNS服务器会在记录中保存两种信息,分别是邮件服务器的域名和优先级。DNS服务器再次在自己内部用邮件服务器的域名搜索,可以找到邮件服务器的IP地址。

  • 域名的层次结构

    域名:越靠右表示层级越高

    比如www.lab.glasscom.com表示:com集团,glasscom部,lab科,的www。

    子域:下级域

    建树:下级域的DNS服务器IP地址要注册到上级域的DNS服务器上

    • 根域:其实域名应该是www.lab.glasscom.com.最后有一个点,表示注册在根域之下,不过根域一般省略。但是根域DNS服务器注册在互联网所有DNS服务器上。

    DNS服务器的接力

    • 工作原理:客户端访问最近的一台DNS服务器,该服务器经过以下反复找寻环节后可以响应解析器的查询消息。(注意:反复找寻的操作是第一个DNS服务器干的活)

    DNS服务器的查找

  • 实际的访问过程:

    • 上级域和下级域共享一个DNS服务器,常有跳过一级查询

    • DNS服务器有缓存功能,若已缓存则直接返回,缓存有有效期

五、委托协议栈发送消息

收发数据:TCP协议、UDP协议。

TCP协议收发数据过程(由协议栈执行):

(1)创建套接字(创建套接字阶段)

(2)将管道连接到服务器端的套接字上(连接阶段)

(3)收发数据(通信阶段)

(4)断开管道并删除套接字(断开阶段)

  • 套接字:数据通信管道两端的数据出入口

  • 创建套接字:

    管道在连接是由客户端发起的,在断开是由服务器or客户端任意一方发起

    客户端与服务器收发数据
    调用socket:创建套接字,返回描述符,放到指定内存中。

    • 描述符:用来识别不同的套接字的标识符
  • 连接阶段:

    调用connect组件,需要:

    • 描述符

    • IP地址

    • 端口号:当同时指定IP地址和端口号时,就可以识别出某台具体计算机上的套接字

    注:在创建套接字时,协议栈会为这个套接字分配一个端口号;在执行连接操作时,会将这个随便分配的端口号通知服务器。

  • 描述符和端口号的区别

    描述符:用来在一台计算机内部识别套接字的机制

    端口号:让通信的另一方能够识别出套接字的机制。预先约定:Web是80号端口,电子邮件是25端口。

  • 通信阶段

    调用write,需要:

    • 描述符

    • 发送的数据

    调用read,需要:

    • 指定接收到的内存地址:接收缓冲区(位于应用程序的内存空间)
  • 断开操作

    HTTP要求Web服务器先断开,HTTP1.1(能在一次连接中收发多个请求和响应)要求浏览器先断开