在浏览器中输入网址后都发生了什么_HTTP

输入网址后……

如上图所示,为在浏览器中输入网址后的示意图。

1.浏览器发起DNS查询请求

在广域网中,我们是基于IP地址进行通信的。但通常客户访问的是一个网址,为此,我们需要先得到网址对应的IP地址,这就需要域名服务系统将域名转换成IP地址。如下图所示,在客户端浏览器中输入网址:http://www.cricode.com时,浏览器会根据本地客户端DNS服务器配置(下图为DNS服务器配置),向DNS服务器获取域名对应的IP地址。

域名解析服务器是基于UDP协议实现的一个应用程序,通常通过监听53端口来获取客户端的域名解析请求。


在浏览器中输入网址后都发生了什么_IP_02


2.域名服务器向客户端返回查询结果域名,从而完成域名到IP地址的转换。

3.客户端向web服务器发送HTTP请求


在得到了域名对应的IP地址后,客户端便可以向真正的web服务器发生HTTP请求了。通常一个HTTP请求格式如下:



GET http://www.cricode.com/ HTTP/1.1
Host: www.cricode.com
Connection: keep-alive
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8

HTTP请求是一个基于TCP协议之上的应用层协议——超文本传输协议。浏览器通过DNS获取到web服务器真的IP地址后,便向web服务器发起tcp连接请求,通过TCP三次握手建立好连接后,浏览器便可以将HTTP请求数据通过发送给服务器了。


4.发送响应数据给客户端

Web服务器通常通过监听80端口,来获取客户端的HTTP请求。与客户端建立好TCP连接后,web服务器开始接受客户端发来的数据,并通过HTTP解码,从接受到的网络数据中解析出请求的url信息以前其他诸如Accept-Encoding、Accept-Language等信息。

Web服务器根据HTTP请求头的信息,得到响应数据返回给客户端。

一个典型的HTTP响应头数据报如下:

HTTP/1.1 200 OK
Date: Fri, 24 Oct 2014 13:55:18 GMT
Server: Apache
X-Powered-By: PHP/5.4.32
Keep-Alive: timeout=5, max=10000
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
a0f6
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=10,IE=9,IE=8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
<title>快课网— 程序员的自我修养!</title>
<body class="home blog">
。。。。。。。
。。。。。。。
</body>
</html>

至此,一个HTTP通信过程完成。web服务器会根据HTTP请求头中的Connection字段值决定是否关闭TCP链接通道,当Connection字段值为keep-alive时,web服务器不会立即关闭此连接。


Connection: keep-alive