1. 浏览器中输入URL
- URL(Uniform Resource Locator)统一资源定位符,用来表示从互联网上得到的资源位置和访问这些资源的方法。URL实际上就是在互联网上的资源的地址。
- URL一般由以下四部分组成:
<协议>://<主机>:<端口>/<路径>
- 这里的
<协议>
就是指出使用什么协议来获取该万维网文档。现在最常用的协议就是HTTP (超文本传输协议HTTP),其次是FTP(文件传输协议)。 - 在
<协议>
后面://
的是规定的格式。 - 这里的
<主机>
就是指该主机在互联网上的域名。 <端口>
和<路径>
有时可以省略。HTTP的默认端口号是80。
2. 浏览器根据输入的URL寻找对应的IP地址(域名解析)
- IP(Internet Protocol 网际协议)地址就是给互联网上的每一台主机 (或路由器)的每一个接口分配一个在全世界范围内是唯一的32位的标识符。
- 对主机或路由器来说,IP地址都是32位的二进制代码。为了提高可读性,我们常常把 32位的IP地址中的每8位插入一个空格(但在机器中并没有这样的空格)。为了便于书 写,可用其等效的十进制数字表示,并且在这些数字之间加上一个点
.
。这就叫做点分十进制记法。显然,128.11.3.31
比10000000 00001011 00000011 00011111
书写起来要方便得多。
- 查找浏览器缓存。如果你先前在浏览器曾经到访过网站。浏览器会缓存DNS(Domain Name System 域名系统)记录一段时间,这样就找到对应的 IP 地址。如果没找到则继续进行域名解析。
- 查找系统缓存。从电脑系统中 Hosts 的文件查找有没有DNS记录,是否有相关的对应的 IP 地址。如果没有,域名解析继续。
- 查找路由器缓存。如果有其他设备使用的路由器曾经到访过网站。路由器也会缓存DNS记录,是否有相关的对应的 IP 地址。如果没有,域名解析继续。
- 查找 ISP DNS 缓存。以上还是没有,就会向你的网络供应商 (Internet Service Provider, ISP) 查找有没有相关DNS记录。
- 查找根域名服务器供应商。ISP DNS 缓存还是没有,就会向根域名服务器供应商,查找相关对应的 IP 地址。根域名伺服器把请求转发给下一级,直到找到对应的IP为止。
3. 与对应IP地址的WEB服务器建立TCP连接
4. 浏览器向WEB服务器发送相应的HTTP请求
- 当建立TCP连接的三报文握手的前两部分完成后(即经过了一个RTT(Round-Trip Time 往返时延)时间后),万维网客户就把HTTP请求报文,作为建立TCP连接的三报文握手中的第三个报文的数据,发送给万维网服务器。
HTTP请求报文和响应报文都是由三部分组成的:
- 开始行,用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行,而在响应报文中的开始行叫做状态行。在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。
- 首部行,用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
- 实体主体,在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。
请求报文的第一行“请求行”只有三个内容,即方法,请求资源的URL,以及HTTP的版本。
下面是HTTP的请求报文的开始行(即请求行)的格式。请注意,在GET后面有一个空格,接着是某个完整的URL,其后面又有一个空格,最后是HTTP/1.1。
GET http://www.xyz.edu.cn/dir/index.htm HTTP/1.1
下面是一个完整的HTTP请求报文的例子:
GET /dir/index.htm HTTP/1.1 //请求行使用了相对URL
Host: www.xyz.edu.cn //此行是首部行的开始。这行给出主机的域名
Connection: close //告诉服务器发送完请求的文档后就可释放连接
User-Agent: Mozilla/5.0 //表明用户代理是使用火狐浏览器Firefox
Accept-Language: cn //表示用户希望优先得到中文版本的文档
//请求报文的最后还有一个空行
5. 服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户
响应报文的第一行“状态行”只有三个内容,即HTTP的版本,状态码,以及解释状态码的简单短语。
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。想具体了解状态码可以前往HTTP状态码。
下面三种状态行在响应报文中是经常见到的。
HTTP/1.1 202 Accepted //接受
HTTP/1.1 400 Bad Request //错误的请求
HTTP/1.1 404 Not Found //找不到
若请求的网页从http://www.ee.xyz.edu/index.html
转移到了 一个新的地址,则响应报文的状态行和一个首部行就是下面的形式:
HTTP/1.1 301 Moved Permanently //永久性地转移了
Location: http://www.xyz.edu/ee/index.html //新的URL
这时候,客服端需要重新发送一个新的HTTP请求去获取新的URL上的文档。
6. 浏览器收到HTML文档后进行处理
- 浏览器进行处理过程主要分为:载入,解析,渲染。
- 载入:由于浏览器对 HTML 页面加载顺序是从上而下的。如果加载过程中遇到外部 css 文件(如下),浏览器会另外发出一个请求,来获取 CSS 文件。遇到图片资源,浏览器也会另外发出一个请求,来获取图片资源。但必须留意当文档加载过程中遇到 Javascript(js) 文件(如下),HTML 文档加载解析渲染同步,不仅要等待文档中 js 文件加载完毕,还要等待解析执行完毕,才可以恢复 HTML 文档的渲染线程,导致 mystyles.css 样式文件和
<body>
标签都无法被加载,这会影响到页面加载的速度,带来不良用户体验。
<html>
<head>
<script type="text/javascript" src="style.js"></script>
<script type="text/javascript" src="style1.js"></script>
<script type="text/javascript" src="style2.js"></script>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
<body>
hello, world!
</body>
</html>