Chinaunix首页 | 论坛 | 博客
  • 博客访问: 178810
  • 博文数量: 11
  • 博客积分: 478
  • 博客等级: 下士
  • 技术积分: 264
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-20 11:45
文章分类
文章存档

2011年(1)

2009年(10)

我的朋友

分类: 系统运维

2009-10-21 22:31:58

                          

The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems.
It is a generic, stateless, protocol which can be used for many tasks beyond its use for hypertext, such as name servers and distributed
object management systems, through extension of its request methods, error codes and headers .


上面这段引用自 (改网站负责HTML标准以及CSS和其他一些有关HTTP协议标准的制定) .可以认为上面这段即为HTTP协议的官方定义。
下面我大致的给了个翻译:
超文本传输协议(HTTP)是一种应用层的分布式,协作式,超媒体信息系统的协议。它是一种通用的,无状态的的协议。通过扩展HTTP的请求头方式,错误码
和头部,协议可用于许多领域而不局限于超文本,如域名服务器和分布式应用对象管理系统。

HTTP 是一种请求/响应式的协议。一个客户机与服务器建立连接后,发送一个请求给服务器,请求的格式是:
统一资源标识符(URI)、协议版本号,
后面是类似MIME 的信息,包括请求修饰符、客户机信息和可能的内容。
服务器接到请求后,给予相应的响应信息,其格式是:
一个状态行包括信息的协议版本号、一个成功或错误的代码,
后面也是类似 MIME 的信息,包括服务器信息、实体信息和可能的内容。


下面给出一个典型的HTTP请求头信息:

GET / HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PREF=ID=1f4f2b0a84ead735:U=4078605afb2c60c7:NW=1:TM=1256108566:LM=1256108570:S=tU8em-fIsV9Bz4jL;
NID=28=qUF-X4we1ysHoxz5rM8m8-l7fiuQgVWvl9admUPmYqUVW9Tg5DBWX3lyX-dR_wEdok9VOi_fDoe8MU0_IkIZD4hws28O6QEiZ2ZmJgLFlZx7tedXMk7L0HbGLsFTft-p
Cache-Control: max-age=0
CRLF
CRLF

请求头分析:
第一行    'GET / HTTP/1.1' 为请求行,其通用格式为 'METHOD /URI HTTP/VERSION'
METHOD即请求的方法(方式)
URI即请求的资源文件
VERSION即请求方所使用的HTTP版本号
请求行以下为属性字段,它告诉服务器一些客服端(即请求方)的信息,它们都是一些键-值对(Key-Value)。
Host字段指定请求目的域名(或者直接用IP地址)
User-Agent字段说明客服端所使用的浏览器名字版本,以及操作系统等信息
Accept字段制定客服端可接受的数据和多媒体类型,其值应该为MIME类型
Accept-Language字段制定客服端可接受的语言集
Accept-Encoding字段指定客服端可以接受的编码方式。
                编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式。


下面是刚才请求头的对于响应头
HTTP/1.1 200 OK
Date: Wed, 21 Oct 2009 07:30:13 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=UTF-8
Server: gws
X-XSS-Protection: 0
Content-Encoding: gzip
Transfer-Encoding: chunked
CRLF
CRLF

响应头分析:
第一行 'HTTP/1.1 200 OK' 为相应行,其通用格式为 'HTTP/VERSION STATUS_CODE STATEMENT'
VERSION即服务器所使用的HTTP版本号
STATUS_CODE即对相应请求头的相应码
STATEMENT即对相应码的说明性内容
Date字段指明服务器响应请求的时间
Expires
Cache-Control
Content-Type字段指明服务器响应文件的MIME类型
Server字段指明服务器的正式名字
X-XSS-Protection
Content-Encoding字段指明服务器为了减少数据传输量而采用的数据压缩(也就是数据编码)方法
Transfer-Encoding字段指明服务器传输响应文件的编码


到此为止,我们已经初步了解了HTTP协议的基本通信原理,那下面就用TELNET来模仿一次HTTP请求。

$telnet 80

GET / HTTP/1.1
CRLF
CRLF

其中CRLF为回车换行,注意输入的时候不能停顿太久,否则服务器认为连接超时就关闭连接了。
其实我们发生的请求头只包含一个请求行: GET / HTTP/1.1
稍等片刻(具体要等多久和网络带宽,延时有关)即一个往返时间(RTT),即可得到服务器的回应,如下:

HTTP/1.1 200 OK
Date: Wed, 21 Oct 2009 13:11:00 GMT
Server: BWS/1.0
Content-Length: 3520
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Wed, 21 Oct 2009 13:11:00 GMT
Set-Cookie: BAIDUID=B1FFC8544004BBFDD1B95A6B9B6DC1D0:FG=1; expires=Wed, 21-Oct-3
9 13:11:00 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "

tle>百度一下,你就知道      ead>
   
v>
usemap="#mp" id=lg>



<
td>tr>

           n=top>
put type=text name=wd id=kw size=42 maxlength=100> 一 下 id=sb>设置
ji/advanced.html>高级

                                                        

/hi.baidu.com>空间  更多>>


                                                                         

le=height:60px>

e>


     

/click.php?id=215&url=http://>把百度设为主页

:14px> | >搜索风云榜 | | .baidu.com>About Baidu

©2009 Baidu com/duty/>使用百度前必读
ICP证030173号
ea shape=rect coords="43,22,227,91" href= target=_blan
k title="点此进入 百度空间">
                                                 

可以看到响应头后跟着两个CRLF,接下的便是响应的实体(在此次请求响应的实体为 index.html,index.html一般为web服务器的默认页)。
相信大家现在对HTTP协议的基本通信流程也有了个大概了解了吧。
其实如果你还想深入理解HTTP的原理,那就得对TCP/TP协议有点了解才行,因为HTTP协议是建立在TCP/TP协议之上的应用层协议
(IP协议作用于网络层,TCP作用于传输层),当然如果你想自己动手写一个web server,那上面这点知识是远远不够的。




Copyleft(C) mushan 2009, email: mushan520@gmail.com.

阅读(4210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~