HTTP协议详解

        HTTPHyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(NextGenerationofHTTP)的建议已经提出。今天在实验室把相关的RFC文档仔细看了一下,对HTTP协议有了一个详细的认识,本文将做一个详细的介绍。

1   HTTP 协议特点及其相关概念
HTTP 协议的主要特点可概括如下:
1. 支持客户 / 服务器模式
    2. 简单快速 :客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET HEAD POST 。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
3. 灵活 HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。
    4. 无连接 :无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
   5. 无状态 HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大 另一方面,在服务器不需要先前信息时它的应答就较快。
1. 连接 (Connection) :一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。
2. 消息 (Message) HTTP 通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。
3. 请求 (Request) :一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号
4. 响应 (Response) :一个从服务器返回的信息包括 HTTP 协议的版本号、请求的状态 ( 例如“成功”或“没找到” ) 和文档的 MIME 类型。
5. 资源 (Resource) :由 URI 标识的网络数据对象或服务。
6. 实体 (Entity) :数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。
7. 客户机 (Client) :一个为发送请求目的而建立连接的应用程序。
8. 用户代理 (Useragent) :初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。
9. 服务器 (Server) :一个接受连接并对请求返回信息的应用程序。
10. 源服务器 (Originserver) :是一个给定资源可以在其上驻留或被创建的服务器。
11. 代理 (Proxy) :一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。
12. 网关 (Gateway) :一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非 HTTP 系统中的资源。
13. 通道 (Tunnel) :是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于 HTTP 通讯,尽管通道可能是被一个 HTTP 请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户 (Portal) 必须存在或中介 (Intermediary) 不能解释中继的通讯时通道被经常使用。
14. 缓存 (Cache) :反应信息的局域存储。
2   HTTP 协议的运作方式
HTTP 协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。 Internet 上, HTTP 通讯通常发生在 TCP/IP 连接之上。缺省端口是 TCP80 ,但其它的端口也是可用的。但这并不预示着 HTTP 协议在 Internet 或其它网络的其它协议之上才能完成。 HTTP 只预示着一个可靠的传输。
3 HTTP 协议的内部操作过程
首先,简单介绍基于 HTTP 协议的客户 / 服务器模式的信息交换过程,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。在 WWW 中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。 WWW 服务器运行时,一直在 TCP80 端口 (WWW 的缺省端口 ) 监听,等待连接的出现。
1. 建立连接  连接的建立是通过申请套接字 (Socket) 实现的。客户打开一个套接字并把它约束在一个端口上,如果成功,就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上写数据并通过网络向外传送。
2. 发送请求 打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动作。 HTTP/1.0   请求消息的格式为:
     请求消息 = 请求行 ( 通用信息 | 请求头 | 实体头 )CRLF[ 实体内容 ]
     请求 行 = 方法 请求 URL   HTTP 版本号  CRLF
     方  法 =GET|HEAD|POST| 扩展方法
    U   R   L= 协议名称 + 宿主名 + 目录与文件名
     请求行中的方法描述指定资源中应该执行的动作,常用的方法有 GET HEAD POST 。不同的请求对象对应 GET 的结果是不同的,对应关系如下:
     对象       GET 的结果
     文件      文件的内容
     程序      该程序的执行结果
     数据库查询   查询结果
    HEAD —— 要求服务器查找某对象的元信息,而不是对象本身。
POST —— 从客户机向服务器传送数据,在要求服务器和 CGI 做进一步处理时会用到 POST 方法。
POST 主要用于发送 HTML 文本中 FORM 的内容,让 CGI 程序处理。
一个请求的例子为: GEThttp://networking.zju.edu.cn/zju/index.htmHTTP/1.0
头信息又称为元信息,即信息的信息,利用元信息可以实现有条件的请求或应答。
请求头——告诉服务器怎样解释本次请求,主要包括用户可以接受的数据类型、压缩方法和语言等。
     实体头——实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
     实体——请求或应答对象本身。
3. 发送响应
服务器在处理完客户的请求之后,要向客户机发送响应消息。
HTTP/1.0 的响应消息格式如下:
响应消息 = 状态行 ( 通用信息头 | 响应头 | 实体头 )   CRLF  〔实体内容〕
状态行 =HTTP 版本号 状态码 原因叙述
响应头的信息包括:服务程序名,通知客户请求的 URL 需要认证,请求的资源何时能使用。
4. 关闭连接   
客户和服务器双方都可以通过关闭套接字来结束 TCP/IP 对话
     通常 HTTP 消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。 HTTP 的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号( : )和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
4 HTTP 各域详细分析
通用头域   通用头域包含请求和响应消息都支持的头域,通用头域包含 Cache-Control Connection Date Pragma Transfer-Encoding Upgrade Via 。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在 UPnP 消息中使用的通用头域。
Cache-Control 头域  Cache-Control 指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control 并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括 no-cache no-store max-age max-stale min-fresh only-if-cached ,响应消息中的指令包括 public private no-cache no-store no-transform must-revalidate proxy-revalidate max-age 。各个消息中的指令含义如下:
Public 指示响应可被任何缓存区缓存。
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache 指示请求或响应消息不能缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定 max-stale 消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Date 头域
Date 头域表示消息发送的时间,时间的描述格式由 rfc822 定义。例如, Date:Mon,31Dec200104:25:57GMT Date 描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
Pragma 头域
Pragma 头域用来包含实现特定的指令,最常用的是 Pragma:no-cache 。在 HTTP/1.1 协议中,它的含义和 Cache-Control:no-cache 相同。
请求消息
请求消息的第一行为下面的格式:
Method
SP
Request-URI
HTTP-Version
CRLF
Method 表示对于 Request-URI 完成的方法,这个字段是大小写敏感的,包括 OPTIONS GET HEAD POST PUT DELETE TRACE 。方法 GET HEAD 应该被所有的通用 WEB 服务器支持,其他所有方法的实现是可选的。 GET 方法取回由 Request-URI 标识的信息。 HEAD 方法也是取回由 Request-URI 标识的信息,只是可以在响应时,不返回消息体。 POST 方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、 BBS 、邮件群组和数据库发送消息。 SP 表示空格。 Request-URI 遵循 URI 格式,在此字段为星号( * )时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。 HTTP-Version 表示支持的 HTTP 版本,例如为 HTTP/1.1 CRLF 表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段 Accept Accept-Charset Accept-Encoding Accept-Language Authorization From Host If-Modified-Since If-Match If-None-Match If-Range If-Range If-Unmodified-Since Max-Forwards Proxy-Authorization Range Referer User-Agent 。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
典型的请求消息    GEThttp://class/download.microtool.de:80/somedata.exe
Host:download.microtool.de
Accept:*/*
Pragma:no-cache
Cache-Control:no-cache
Referer:http://class/download.microtool.de/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-
Host 头域
Host 头域指定请求资源的 Intenet 主机和端口号,必须表示请求 url 的原始服务器或网关的位置。 HTTP/1.1 请求必须包含主机头域,否则系统会以 400 状态码返回。
Referer 头域
Referer 头域允许客户端指定请求 uri 的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化 cache 等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的 uri 没有自己的 uri 地址, Referer 不能被发送。如果指定的是部分 uri 地址,则此地址应该是一个相对地址。
Range 头域
Range 头域可以请求实体的一个或者多个子范围。 但是服务器可以忽略此请求头,如果无条件 GET 包含 Range 请求头,响应会以状态码 206 PartialContent )返回而不是以 200 OK )。
User-Agent 头域 User-Agent 头域的内容包含发出请求的用户信息。
响应消息   响应消息的第一行为下面的格式:
HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF HTTP-Version 表示支持的 HTTP 版本,例如为 HTTP/1.1 Status-Code 是一个三个数字的结果代码。 Reason-Phrase Status-Code 提供一个简单的文本描述。 Status-Code 主要用于机器自动识别, Reason-Phrase 主要用于帮助用户理解。 Status-Code 的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取 5 个不同的值:
1xx: 信息响应类,表示接收到请求并且继续处理
2xx: 处理成功响应类,表示动作被成功接收、理解和接受
3xx: 重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx: 客户端错误,客户请求包含语法错误或者是不能正确执行
5xx: 服务端错误,服务器不能正确执行一个正确的请求
响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI 进一步的信息。响应头域包含 Age Location Proxy-Authenticate Public Retry-After Server Vary Warning WWW-Authenticate 。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值