曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4465|回复: 0
打印 上一主题 下一主题

HTTP 协议

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2010-3-21 16:42:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
HTTP 中的持续连接 (Persistent Connections)
在 HTTP1.0 中,当连接建立后,浏览器发送一个请求,服务器在回应一个消息后就关闭连接。当浏览器下次请求时,需要重新建立连接,很显然这种需要不断建立连接的通信方式会造成很大的开销。但是早期  WEB 页面通常只是简单的 HTML 文本,因此即使建立连接的开销很大,也不会有太大的影响。而现在的 WEB 页面往往包含各种资源,如图片,声音,动画等,如果每获取一种资源,就要建立一次连接,那么这就大大的增加了 HTTP 服务器的开销,造成 Internet 上的信息堵塞,这是无法忍受的。

所以,在 HTTP1.1 版本中给出了一个可持续连接 (Persistent Connections) 的机制,这也是 HTTP1.1 中建立连接的缺省行为。通过这种连接,浏览器可以在建立一个连接后,发送请求并得到回应,然后继续发送请求并再次得到回应。而且,客户端还可以发送流水线请求,也就是说,客户端可以连续发送多个请求,而不用等待每一个响应的到来。

什么是 URI ?
URI (Uniform Resource Identifier) 的名称是“统一资源标识符”。它纯粹是一个符号结构,用于指定构成 WEB 资源的字符串的各个不同部分。URL (俗称网址)是一种特殊类型的 URI,它包含了用于查找某个资源的足够信息。其它的 URI,例如 : mail:beyes@groad.net 则不属于 URL,因为它里面没有根据标识符来超找的任何数据。这种 URI 称为 URN (通用资源名)。

HTTP 请求:
HTTP 请求由三部分组成:
      请求行
      消息报头
      请求正文


请求行
请求行以一种方法符号开头,后面跟着请求 URI 和协议的版本,并以 CRLF 作为结尾(CR 回车;LF 换行)。请求行以空格分隔,除了作为结尾的 CRLF 外,不允许出现单独的 CR 或 LF 字符。格式如下:
Method Request-URI HTTP-Version CRLF

Method 表示请求的方法,Request-URI 是一个统一资源标识符,标识了要请求的资源,HTTP-Version 表示请求的 HTTP 协议版本,CRLF 表示回车换行。例如当我在浏览器里输入百度并回车时会有:
GET /js/bdsug.js?v=1.1.1.0 HTTP/1.1

像上面,使用的是 GET 方法,GET 方法用于获取由 Request-URI 所标识的资源信息,常见的形式为:
GET Request-URI HTTP/1.1
当我们通过浏览器的地址栏里输入网址的方式访问网页时,浏览器才用的就是 GET 方法向服务器获取资源的。

HTTP 请求的方法还有

方法作用
GET请求获取由 Request-URI 所标识的资源
POST在 Request-URI 所标识的资源后附加新的数据
HEAD请求获取由 Request-URI 所标识的资源的响应消息报头
PUT请求服务器存储的一个资源,并用 Request-URI 作为其标识
DELETE请求服务器删除由 Request-URI 所标识的资源
TRACE请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT保留将来使用
OPTIONS请求查询服务器的性能,或者查询与资源相关的选项和需求

POST 方法:
POST 方法用于向服务器发出请求,要求服务器接受附在请求后面的数据。POST 方法在表单提交的时候用得比较多。
才用 POST 方法提交表单的例子(在论坛的首页里填入用户名和密码后登录论坛为例):

POST /bbs/login.php HTTP/1.1          /*请求方法*/
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*        /*请求首部, Accept 给出客户能够接受的媒体格式*/
Referer: http://www.groad.net/bbs/index.php
Accept-Language: zh-cn            /*请求首部, 给出客户能够接受的语言*/
Content-Type: application/x-www-form-urlencoded       /*实体首部, 指名媒体类型*/
Accept-Encoding: gzip, deflate  /*请求首部, 给出客户能够处理的编码方案*/
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 602; .NET CLR 2.0.50727)        /*请求首部, 标志客户程序*/
Host: www.groad.net       /*请求首部,给出客户主机(或者还有端口号)*/
Content-Length: 141        /*实体首部, 给出文档长度*/
Connection: Keep-Alive /*通用首部, 指出是否连接应当关闭或不要关闭*/
Cache-Control: no-cache       /*通用首部, 指名关于告诉缓存的信息*/
Cookie: a2a20_lastpos=index; a2a20_ol_offset=97; a2a20_ipstate=1269162646; a2a20_threadlog=%2C49%2C79%2C81%2C52%2C23%2C85%2C41%2C20%2C86%2C; a2a20_readlog=%2C1355%2C1372%2C1406%2C1255%2C1205%2C682%2C1491%2C301%2C1646%2C; a2a20_skinco=wind; f8aa5_lastpos=index; f8aa5_ol_offset=97; f8aa5_ipstate=1247758523; f8aa5_ck_info=%2F%09; f8aa5_winduser=UzEGWgYEU1VXBwEJUlQJAFUBW1tXWgMAAA0DBQBVVgMEBzk%3D; f8aa5_lastvisit=0%091247758553%09%2Fbbs%2Findex.php%3F; f8aa5_AdminUser=UwoFVABXXQFYBzhQUwhYCjkHUlkHVABQB1dQAwYFAQEFVAAHUgoIW1NRVFYCV1QEUmw%3D; rtime=29; ltime=1269167749127; cnzz_eid=23418232-1249218925-; a2a20_cknum=AwdUA1sBVgoEVGo%2BWgtUCVAHVFdYVABQVgAGBVNVUQADXQdQAgYCBgFUAVY%3D; a2a20_AdminUser=VwFQVAIDAgdQVztSVQgPWz0KAAVSAgAFUFdaVgJWCAMEV1BdBwpUBFFRUAcDBFRWU2w%3D; cnzz_a1569395=25; sin1569395=none; a2a20_jobpop=0; a2a20_lastvisit=0%091269167449%09%2Fbbs%2Findex.php; ystat_bc_931085=3909157350785410338
jumpurl=http%3A%2F%2Fwww.groad.net%2Fbbs%2Findex.php&step=2&cktime=31536000&pwuser=beyes&pwpwd=xxxxxxxx&lgt=0&question=0&customquest=&answer=

上面对报文的首部信息进行了注释。“首部”是客户机和服务器之间交换的附加信息。首部可以有一个或多个首部行。每一个首部行由一个首部名、一个冒号、一个空格、和一个首部值组成。一个首部行属于 4 个种类中的一个:
      通用首部
      请求首部
      响应首部
      实体首部


请求报文可以只包含通用首部、请求首部和实体首部。响应报文则只包含通用首部、响应首部和实体首部。

HEAD 方法
HEAD 方法与 GET 方法几乎是一样的,它们的区别在于 HEAD 方法只是请求消息报头,而不是完整的内容。对于 HEAD 请求的回应部分来说,它的 HTTP 头部中包含的信息与通过 GET 请求得到的信息是相同的。所以,利用这个方法,就不必传输整个资源的内容,就可以得到 Request-URI 所标识的资源的信息。这个方法通常被用于测试超链接的有效性,是否可以访问,以及最近是否更新。

注意
在 HTML 文档中,书写 get 和 post,可以不区分大小写,但在 HTTP 协议中,GET 和 POST 只能是大写形式。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 19:32 , Processed in 0.077971 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表