![](http://cricode.qiniudn.com/http1.png)
输入网址后……如上图所示,为在浏览器中输入网址后的示意图。
1.浏览器发起DNS查询请求
在广域网中,我们是基于IP地址进行通信的。但通常客户访问的是一个网址,为此,我们需要先得到网址对应的IP地址,这就需要域名服务系统将域名转换成IP地址。如下图所示,在客户端浏览器中输入网址:http://www.cricode.com时,浏览器会先根据本地客户端DNS服务器配置(下图为DNS服务器配置),向DNS服务器获取域名对应的IP地址。域名解析服务器是基于UDP协议实现的一个应用程序,通常通过监听53端口来获取客户端的域名解析请求。
![](http://cricode.qiniudn.com/dns1.jpg)
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响应头数据报如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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
|