缩略图
程序开发 \

HTTP传输协议示例

可能大家对http都不陌生,在我们每次浏览网页的时候都会遇到它。可是我们都没有去注意过http真正做了什么?当然对于大多数人来说也不必去专注这个东西,但如果你是一个web开发人员,去了解和掌握http协议应该说是必不可少的。专业点讲http是一个协议,是一个应用层的协议,全称叫超文本传输协议(Hypertext Transfer Protocol)。通俗点讲http就是一个约定或者说是一个规范,需要通信双方(浏览器和服务器)都去遵守这个约定,如果有一方没有遵守这个约定,那么通信就会失败。

连接

当我们打开浏览器,输入网址准备浏览一个网页的时候,在不知不觉中http协议已经开始了。首先浏览器会根据你输入的网址向目标地址建立一个连接(TCP连接),连接成功之后,紧接着向目标地址发送一个请求(HTTP Request),这个请求需要遵守http协议标准,不然对方看不懂你想要什么东西。当服务端接受到请求之后,会分析你的请求,然后根据你的请求发送响应(HTTP Response)。最后浏览器把接收到的响应内容按照某种规范(比如html规范、css标准等)显示到屏幕上。整个过程如下图所示

这就是我们平时打开一个网站的时候,http在幕后所做的事情。整个过程可能进行的非常快,以至于我们都察觉不到,但这个过程是确确实实存在的。从这个过程中我们也可以知道,http的数据传输主要有两个阶段:请求(HTTP Request)和响应(HTTP Response)。下面就通过一个实例看一下这两个阶段的数据内容格式(报文格式)是什么样的。

HTTP Request 示例

我们以打开本站的主页http://domety.com/为例,通过Httpanalyzer来分析发送的HTTP Request内容

GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: domety.com
Connection: Keep-Alive

本文不打算对以上内容的含意进行解释,只是展示一下整个过程的概貌,详细内容将在后续文章进行说明。

HTTP Response 示例

接收到的响应内容如下

HTTP/1.1 200 OK
Date: Mon, 18 Jan 2010 07:21:32 GMT
Server: Apache/2
X-Powered-By: PHP/5.2.9
X-Pingback: http://domety.com/xmlrpc.php
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Last-Modified: Mon, 18 Jan 2010 07:21:33 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 8702
Keep-Alive: timeout=3, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Domety : 分享软件、互联网应用技巧以及开发技能</title>

(......此处省略网页内容)

</body>
</html>

我们的浏览器在接收到以上内容之后,根据html规范对内容进行解析,然后显示到屏幕上,就是我们最终看到的网页

从上面的示例中我们可以看出,浏览器的工作原理就是发送和接收http数据,并对接受的数据进行解析。从这方面讲,理论上我们可以开发自己的浏览器……

添加评论

3 条评论

  1. 1 F

    抚顺房产

    2010-01-19 星期二 21:05

    http我是天天看,也想知道是什么意思,但觉得研究还没有必要,逛朋友网站才知道,可惜没有更多是时间学习,谢谢朋友让我得到了知识。

    回复
  2. 2 F

    vsweb

    2010-01-20 星期三 17:43

    嘿嘿 现在知道啦 谢谢站长 以前就根本没有去注意到

    回复
  3. 3 F

    Firn

    2010-01-20 星期三 21:22

    原来还要这么多道道。

    回复

添加评论