当输入网址之后...

在互联网时代,用户打开计算机第一件事大概就是打开浏览器,输入网址,按下回车就会看到想要的内容。而这个过程,在开发者眼中却远没有那么简单,在浏览器背后的工作很多,也可以分得很详细,在此只是说一下一时间能想到的,尽量详尽,如果有不完整的地方后面还会补充。

发生在网络前面的事

首先,用户想输入内容按下回车,直接需要交互的就是键盘鼠标显示器等等,这些东西称之为I/O设备。I/O就是input和output,这类设备负责处理用户和计算机之间的输入输出的交互,其中键盘鼠标是输入设备,显示器是输出设备。

然后,接下来的调度就要由操作系统来进行了,常见的操作系统有很多,Windows、macOS、Linux等等,操作系统负责管理硬件,为程序运行提供环境,而我们的浏览器就是运行在操作系统上的一个进程。

接下来就到浏览器了,浏览器是大家非常熟悉的一个软件,到了这里,就要开始和网络交互了。

网络请求与相应

网络请求实际上是浏览器和服务器之间的交互,一个简单的模型就是浏览器作为客户端向服务器发送请求,服务器处理请求并给浏览器响应。而想要发送请求的第一步就是要找到服务器在哪。

在互联网的世界里,每一台接入公网的主机都会拥有一个独一无二的地址,这个地址叫做IP地址,服务器也不例外,要知道服务器不过就是一台运行了特定程序的主机而已,与PC并没有本质的区别。不过我们大多数时候并不会直接向浏览器中输入IP地址,因为IP地址不容易记忆。拿百度为例61.135.169.121很明显没有www.baidu.com直观。所以我们通常输入的其实都是域名,此时就需要一种机制来把域名解释成对应的IP地址,这就是DNS。DNS是一个基于UDP的网络协议,用于服务器IP地址的解析,DNS服务由DNS服务器提供,默认端口是UDP的53。一个计算机的DNS服务器配置在操作系统中,也是计算机上网必须配置的一项。有了DNS,当我们请求网络时候,浏览器会先把域名发送给系统默认DNS服务器,如果该服务器本地有缓存,且缓存未过期,则直接返回结果,否则向上一级DNS服务器查询,直到DNS根服务器,找到了就会返回目标IP地址,找不到就会提示错误。浏览器就可以向目标发送请求了。

发送网络请求,首先要建立连接,客户端和服务端在底层建立的是socket连接,而可靠传输协议需要建立TCP连接,此时需要进行三次握手,三次握手机制保证了消息传递的相对可靠性,之后就可以在上层建立高级的传输协议了,在此只讨论浏览网页的http和tttps协议。

http(超文本传输协议)和https区别就在于https多了一层安全协议SSL(Secure Sockets Layer,安全套接层),所以https理论上比http安全。http主要包括请求和响应两部分,现在客户端的就是请求,浏览器会自动为我们生成请求消息,请求消息分如下三部分:

  • 请求行:请求的方法(POST/GET/…)、URL、HTTP版本(1.1/2);
  • 消息头:请求的附加信息,以空行结束;
  • 消息体:数据,比如 POST 请求时的表单数据。

连接一旦建成就可以发送消息了,客户端把请求发给了服务器,接下来就是服务器端程序的工作了。

服务端的任务就是处理请求,给出相应的处理结果。这部分处理包括解析请求内容、查询数据库、处理数据格式、运算等等,最终要给用户返回结果,有可能是完整的html页面,也有可能只是json数据,这取决于该网站的开发方式。之后就要把结果反馈给浏览器了,同样的要生成响应消息:

  • 状态行:HTTP版本、状态码(200/304/404/…)、解释状态的响应短语;
  • 消息头
  • 消息体:返回的数据。

传送结束连接就会断开,http是无状态的协议。此时浏览器就会拿到响应消息开始展示了。

浏览器中展示的最终内容是html(超文本标记语言),内容来自于服务端,有可能是完整的一页内容,也可能是空页面加数据两部分,然后在浏览器里面渲染成页面,不管怎么说,此时用户就可以看到想要的页面了。

说的好像不太清楚,后面还会补充。

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!