`
easay107
  • 浏览: 18184 次
社区版块
存档分类
最新评论

HTTP协议

 
阅读更多

1 HTTP协议特点及其相关概念

HTTP协议的主要特点可概括如下:

 

    1.支持客户/服务器模式。

 

    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GETHEADPOST。由于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=协议名称+宿主名+目录与文件名

 

                                  请求行中的方法描述指定资源中应该执行的动作,常用的方法有GETHEADPOST。不同的请求对象对应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的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

 

4HTTP各域详细分析

 通用头域  通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-ControlConnectionDatePragmaTransfer-EncodingUpgradeVia。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。

 Cache-Control头域 Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cacheno-storemax-agemax-stalemin-freshonly-if-cached,响应消息中的指令包括publicprivateno-cacheno-storeno-transformmust-revalidateproxy-revalidatemax-age。各个消息中的指令含义如下:

 

 Public指示响应可被任何缓存区缓存。

 

Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

 

 no-cache指示请求或响应消息不能缓存

 

 no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

 

 max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

 

 min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

 

 max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

 

 Date头域

 

 Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMTDate描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

 

 Pragma头域

 

 

 Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。

 

请求消息

 

 请求消息的第一行为下面的格式:

 Method

SP

Request-URI

HTTP-Version

CRLF

Method表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONSGETHEADPOSTPUTDELETETRACE。方法GETHEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。SP表示空格。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1CRLF表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段AcceptAccept-CharsetAccept-EncodingAccept-LanguageAuthorizationFromHostIf-Modified-SinceIf-MatchIf-None-MatchIf-RangeIf-RangeIf-Unmodified-SinceMax-ForwardsProxy-AuthorizationRangeRefererUser-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请求头,响应会以状态码206PartialContent)返回而不是以200OK)。

 

 User-Agent头域User-Agent头域的内容包含发出请求的用户信息。

 

 响应消息  响应消息的第一行为下面的格式:

 

HTTP-VersionSPStatus-CodeSPReason-PhraseCRLFHTTP-Version表示支持的HTTP版本,例如为HTTP/1.1Status-Code是一个三个数字的结果代码。Reason-PhraseStatus-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:

 

 

 

                                1xx:信息响应类,表示接收到请求并且继续处理

 

                                2xx:处理成功响应类,表示动作被成功接收、理解和接受

 

                                3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理

 

                                4xx:客户端错误,客户请求包含语法错误或者是不能正确执行

 

                                5xx:服务端错误,服务器不能正确执行一个正确的请求

 

响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含AgeLocationProxy-AuthenticatePublicRetry-AfterServerVaryWarningWWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。

分享到:
评论

相关推荐

    HTTP协议分析报告

    (2) 由于网页文档的传输需要可靠性的保证,所以HTTP协议使用TCP协议,TCP协议是一个面向连接的协议,在通信时需要建立连接,通信结束要释放连接,TCP建立连接时需要三次握手,提供可靠的数据传输,HTTP协议默认...

    深入理解HTTP协议

    深入理解HTTP协议

    http 协议解析类 c++

    能够处理http协议:(1)解析 (2)构造http格式

    网络协议TCP/IP实验七 HTTP 协议分析实验

    湘潭大学 网络协议TCP/IP实验七 HTTP 协议分析实验报告,仅供参考

    HTTP协议ppt HTTP协议ppt

    HTTP协议ppt

    HTTP协议详细解释

    HTTP协议

    http 协议

    http协议头 HTTP 请求和 HTTP 响应都使用头发送有关 HTTP 消息的信息。头由一系列行组成,每行都包含名称,然后依次是冒号、空格、值。字段可按任何顺序排列

    认清http协议本质

    认清http协议本质,可供参考博客: http://blog.csdn.net/u010661782/article/details/52714026

    HTTP协议详解.pdf

    在TCP/IP协议模型中, HTTP协议是在应用层使用的协议,他的作用是将我们需要发送的数据进行封装,然后通过下一层的层层传递发送给目的主机,目的主机会给他一个响应或者返回他查询的数据。应该是在我们开发的过程中...

    http协议详解

    由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接:无连接的含义是限制每次连接只处理一个请求。...

    HTTP协议详解(真的很经典)

    HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP...

    http协议中文版(http协议中文版)

    http协议中文版,全面介绍了http协议,不可多得的好资料

    java实现http协议jar包

    java实现http协议jar包,是一个访问http协议工具类,导入全部jar包到项目里面,调用httpRequest方法及可实现http协议访问,以及获取代理IP方法封装

    c# HTTP协议的连接方式

    c# HTTP协议的连接方式------------------------------

    HTTP协议.zip_HTTP_HTTP协议

    精心整理的的http协议资料,比较简要,明确,完整

    HTTP协议详解_HTTP协议_

    HTTP协议详解 2010年 06月 22日

    面试中的HTTP协议

    详细讲解面试中的HTTP协议 详细讲解面试中的HTTP协议 详细讲解面试中的HTTP协议

    物联网项目实战开发之基于STM32+ESP8266WIFI通过HTTP协议接入中移OneNet云平台代码程序,支持WEB及APP

    2、通过HTTP协议接入平台,接收平台端下发的控制指令并动作。上报继电器状态及温湿度值。 3、代码使用KEIL开发,当前在STM32F103C8T6运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH...

    HTTP协议超级详解.docx

    W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

    HTTP协议详解及RFC2616(HTTP)中文版

    HTTP协议详解 RFC2616(HTTP)中文版 pdf 格式,高清

Global site tag (gtag.js) - Google Analytics