`
meng_fan_zhen
  • 浏览: 1857 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
http 传输原理及格式
                  



HTTP是Web协议集中的重要协议,它是从客户机/服务器模型发展起来的。客户机/服务器是运行一对相互通信的程序,客户与服务器连接时,首先,向服务器提出请求,服务器根据客户的请求,完成处理并给出响应。浏览器就是与Web服务器产生连接的客户端程序,它的端口为TCP的80端口。举一个大家都很常见的例子,浏览器与Web服务器之间所遵循的协议就是HTTP。

Web的应用层协议HTTP是Web的核心。HTTP在Web的客户程序和服务器程序中得以实现。运行在不同端系统上的客户程序和服务器程序通过交换HTTP消息彼此交流。HTTP定义这些消息的结构以及客户和服务器如何交换这些消息。HTTP定义Web客户(即浏览器)如何从web服务器请求Web页面,以及服务器如何把Web页面传送给客户。

HTTP协议的优点就是可以解决传输数据的准确性、安全性较高、而且有处理网络拥塞的能力。这主要的原因就是HTTP协议传输数据的时候,是由HTTP都把TCP作为底层的传输协议。HTTP客户首先发起建立与服务器TCP连接。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问TCP。如前所述,客户端套接字是客户进程和TCP连接之间的“门”,服务器端套接字是服务器进程和同一TCP连接之间的门。客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息。类似的,服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。客户或服务器一旦把某个消息送入各自的套接字,这个消息就完全落入TCP的控制之中。

TCP给HTTP提供一个可靠的数据传输服务;这意味着由客户发出的每个HTTP请求消息最终将无损地到达服务器,由服务器发出的每个HTTP响应消息最终也将无损地到达客户。我们可从中看到分层网络体系结构的一个明显优势——HTTP不必担心数据会丢失,也无需关心TCP如何从数据的丢失和错序中恢复出来的细节。HTTP/1.1服务器端处理请求时按照收到的顺序进行,这就保证了传输的正确性。当然,服务器端在发生连接中断时,会自动的重传请求,保证数据的完整性。

值得注意的是HTTP协议的建立连接方式也非常特别,在早先的HTTP/1.0版本中使用的是非持久连接,而到了HTTP/1.1时非持久连接和持久连接都被支持,但默认使用持久连接。在此要说明非持久连接大概的过程是,举一个浏览网页的例子。首先客户由与TCP连接相关联的本地套接字发出—个HTTP请求消息;其次,服务器接受请求并且经由同一个套接字发送响应消息;然后HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接);这时HTTP客户经由同一个套接字接收这个响应消息后,TCP连接随后终止。该消息明确标明所封装的对象是一个什么样的文件。客户从中取出这个文件,加以分析后发现其中的真正内容的引用。然后再对这些内容申请连接,最后浏览器就可以显示出网页的内容了,假如网页的内容是由5幅图片组成的那么完成对网页的浏览就需要有6次TCP的连接,这是HTTP/1.0版本的做法。

在HTTP/1.1中,在持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。整个Web页面(上例中为包含一个基本HTML文件和5个图像的页面)可以通过单个持久TCP连接发送,甚至存放在同一个服务器中的多个web页面也可以通过单个持久TCP连接发送。通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。这种情况下,web页面所引用的每个对象(上例中的5个图像)都经历1个RTT的延迟,用于请求和接收该对象。与非持久连接2个RTT的延迟相比,不带流水线的持久连接已有所改善,不过带流水线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服务器资源便闲置了。HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下,HTTP客户每碰到一个引用就立即发出一个请求,因而HTTP客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。如果所有的请求和响应都是紧挨着发送的,那么所有引用到的对象一共只经历1个RTT的延迟(而不是像不带流水线的版本那样,每个引用到的对象都各有1个RTT的延迟)。另外,带流水线的持久连接中服务器空等请求的时间比较少。与非持久连接相比,持久连接(不论是否带流水线)除降低了1个RTT的响应延迟外,缓启动延迟也比较小。其原因在于既然各个对象使用同一个TCP连接,服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反,服务器可以按照第一个对象发送完毕时的速率开始发送下一个对象。

从上面的例子不难看出,非持久连接中用户的点击导致浏览器发起建立一个与Web服务器的TCP连接,这里涉及一个三次握手的过程:首先是客户向服务器发送一个小的冗余消息,接着是服务器向客户确认并响应一个小的TCP消息,最后是客户向服务器回确认。三次握手过程的前两次结束时,流逝的时间为1个RTT。此时客户把HTTP请求消息发送到TCP连接中,客户接着把三次握手过程最后一次中的确认捎带,在包含这个消息的数据分节中发送出去。服务器收到来自TCP连接的请求消息后,把相应的HTML文件发送到TCP连接中,服务器接着把对早先收到的客户请求的确认捎带在包含该HTML文件的数据分节中发送出去。这个HTTP请求顺应交互也花去1个RTT时间。很容易就能看出持久连接在时间损耗上的优势了。

另外一个非常重要的地方就是HTTP协议的请求头以及响应头的格式。如果不清楚请求头的格式就无法向服务器端准确地发送下载请求;同时响应头的获得信息,对下载工具下一步的处理也至关重要。下面列出HTTP请求消息:

GET/somedir/page.htmlHTTP/1.1

Host:www.hhit.edu.cn

Connection:close

User-agent:Mozilla/4.0

Accept-language:zh-cn

(额外的回车符和换行符)

首先,这个消息是用普通的ASCII文本书写的。其次,这个消息共有5行(每行以一个回车符和一个换行符结束),最后一行后面还有额外的一个回车和换行符。当然,一个请求消息可以不止这么多行,也可以仅仅只有一行。该请求消息的第一行称为请求行(request line),后续各行都称为头部行(header)。请求行有3个字段:方法字段、URL字段、HTTP版本字段。方法字段有若干个值可供选择,包括GET、POST和HEAD。HTTP请求消息绝大多数使用GET方法,这是浏览器用来请求对象的方法,所请求的对象就在URL字段中标识。本例中浏览器实现的是HTTP/1.1版本。

上面例子中的请求消息有四行他们的意思分别是:

头部行Host:www.hhit.edu.cn存放所请求对象的主机。

请求消息中包含头部Connection:close是在告知服务器本浏览器不想使用持久连接;服务器发出所请求的对象后应关闭连接。尽管产生这个请求消息的浏览器实现的是HTTP/1.1版本,它还是不想使用持久连接。

User-agent头部行指定用户代理,也就是产生当前请求的浏览器的类型。本例的用户代理是Mozilla/4.0,它是Nelscape浏览器的一个版本。这个头部行很有用,因为服务器实际上可以给不同类型的用户代理发送同一个对象的不同版本(这些不同版本位用同一个URL寻址)。

最后,Accept-languag:头部行指出要是所请求对象有简体中文版本,那么用户宁愿接收这个版本;如果没有这个语言版本,那么服务器应该发送其默认版本。Accept-languag:仅仅是HTTP的众多内容协商头部之一。

HTTP协议请求消息的一般格式如图:




图  HTTP协议的请求信息格式

值得注意的是在请求消息的最后是附属体,在我们给出的例子中并没有这一项。是因为,附属体不在GET方法中使用,而是在POST方法中使用。POST方法适用于需由用户填写表单的场合,如往google搜索引擎中填入待搜索的词。用户提交表单后,浏览器就像用户点击了超链接那样仍然从服务器请求一个Web页面,不过该页面的具体内容却取决于用户填写在表单各个字段中的值。如果浏览器使用POST方法提出该请求,那么请求消息附属体中包含的是用户填写在表单各个字段中的值。

HTTP协议的响应消息和请求消息有所不同,下面是一个典型的响应消息:

HTTP/1.1 200 OK

Connection:close

Date:Thu,13Oct200503:17:33GMT

Server:Apache/2.0.54(Unix)

Last-Modified:Mon,22Jun199809;23;24GMT

Content-Length:682l

Content-Type:text/html

(数据数据数据数据数据…………)

这个响应消息分为3部分:1个起始的状态行(Status Line),6个头部行、1个包含所请求对象本身的附属体。状态行有3个字段:协议版本字段、状态码字段、原因短语字段。本例的状态行表明,服务器使用HTTP/1.1版本,状态码(Status Codes)200表示响应过程完全正常(也就是说服务器找到了所请求的对象,并正在发送)。

在上面的响应消息中头部行的意思分别是:

服务器使用Connection:close头部行告知客户自己将在发送完本消息后关闭TCP连接。

Date头部行:指出服务器创建并发送本响应消息的日期和时间。注意,这并不是对象本身的创建时间或最后修改时间,而是服务器把该对象从其文件系统中取出,插入响应消息中发送出去的时间。

Server头部行:指出本消息是由Apache服务器产生的;它与HTTP请求消息中的User-agent头部行类似。

Last-Modified头部行:指出对象本身的创建或最后修改日期或时间。Last-Modified头部对于对象的高速缓存至关重要,且不论这种高速缓存是发生在本地客户主机上还是发生在网络高速缓存服务器主机(也就是代理服务器主机)上。

Content-Length头部行:指出所发送对象的字节数。

Content-Type头部行:指出包含在附属体中的对象是HTML文本。对象的类型是由Content—Type头部而不是由文件扩展名正式指出的。

HTTP响应消息格式如图:




图  HTTP协议的响应信息格式




图 完整的HTTP请求响应内容

在响应消息中的状态行明显多出了明显多出了状态码(Status Codes)和原因短语,是因为在请求的信息可能存在着很多情况需要区分开,这样也便于用户能够清楚地知道请求的情况以及出错的原因,响应消息中的状态码和原因短语指示相应请求的处理结果。当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:

1XX客户方错误

100  继续

101  交换协议

2XX成功

200  OK

201  已创建

202  接收

203  非认证信息

204  无内容

205  重置内容

206  部分内容

3XX重定向

300  多路选择

301  永久转移

302  暂时转移

303  参见其它

304  未修改(Not Modified)

305  使用代理

4XX客户方错误

400  错误请求(Bad Request)

401  未认证

402  需要付费

403  禁止(Forbidden)

404  未找到(Not Found)

405  方法不允许

406  不接受

407  需要代理认证

408  请求超时

409  冲突

410  失败

411  需要长度

412  条件失败

413  请求实体太大

414  请求URL太长

415  不支持媒体类型

5XX服务器错误

500  服务器内部错误

501  未实现(Not Implemented)

502  网关失败

504  网关超时

505  HTTP版本不支持
分享到:
评论

相关推荐

    爬虫的HTTP原理,看完这一长篇就够了!(附三大爬虫案例)

    理解HTTP原理对于构建高效、安全的爬虫至关重要。本文将深入探讨HTTP的基本概念、请求与响应过程,以及在爬虫中的应用,并通过三大案例帮助你进一步掌握相关知识。 一、HTTP基础 HTTP是一种无状态、基于请求/响应...

    爬虫的HTTP原理(附三大爬虫案例)

    在互联网中,HTTP(超文本传输协议)是爬虫与服务器进行通信的基础,理解HTTP原理对于编写高效的爬虫至关重要。 HTTP协议是应用层的一个协议,主要用于Web浏览器和Web服务器之间的信息交换。它定义了客户端如何向...

    计算机后端-PHP视频教程. php之blog实战41-http原理.wmv

    计算机后端-PHP视频教程. php之blog实战41-http原理.wmv

    HTTP原理......

    HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,它定义了客户端(如浏览器)和服务器之间数据交换的格式和交互规则。HTTP基于TCP/IP通信协议来传输...了解这些基础原理对于理解和优化网络性能至关重要。

    HTTP协议简介及其工作原理.pdf

    HTTP 协议简介及其工作原理 HTTP 协议简介 超文本传输协议(HTTP)是万维网应用层的协议,由两个程序实现:一个是客户端程序(一般称为浏览器),另一个是服务器(常称 Web 服务器)。这两个通常运行在不同的主机...

    http协议的基本原理

    http协议的基本原理讲解,课件,自学资料

    Http下载原理讲解

    ### Http下载原理详解 #### 一、HTTP下载基础概念 HTTP (Hypertext Transfer Protocol) 是互联网上应用最为广泛的一种网络协议,它主要用于规范客户端(如浏览器)与服务器之间的通信方式。HTTP 协议允许客户端从...

    HTTP下载限速原理

    HTTP下载限速原理,简单易懂,通俗明理,让你认识整个过程

    python 零基础学习篇4 cookie的http原理角度的流程 .mp4

    python 零基础学习篇

    HTTP工作原理介绍

    **HTTP工作原理详解** HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,它定义了客户端(通常是浏览器)与服务器之间的通信格式。理解HTTP的工作原理对于开发Web应用程序、优化网页性能以及排查网络...

    HTTP 的工作原理

    总的来说,理解HTTP的工作原理对于任何Web开发人员都是至关重要的,因为它是互联网通信的基础。J2ME中的HTTP连接编程则允许开发者为移动设备创建网络应用程序,尽管随着技术的发展,现代移动平台可能使用更高级的API...

    HTTP的原理和工作机制讲义

    HTTP协议的工作原理是基于客户端-服务器模型。客户端向服务器发起一个请求,服务器响应这个请求。请求和响应都是通过HTTP报文进行通信的。 HTTP的工作机制具体来说,当用户在浏览器中输入一个URL地址后,浏览器会...

    HTTP协议原理+实践 Web开发工程师必学

    理解HTTP协议的原理对于Web开发工程师来说至关重要,因为这直接影响到网页的加载速度、数据交互的效率以及安全性。本文将深入探讨HTTP协议的核心概念、工作流程以及实际应用。 一、HTTP协议概述 HTTP协议是一种无...

    http协议基本原理

    **HTTP协议基本原理** HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,它是Web服务的基础,用于在Web浏览器和服务器之间传输数据。理解HTTP协议的基本原理对于任何从事Web开发或网络编程的人来说都...

    HTTP简明原理

    ### HTTP简明原理 HTTP(Hypertext Transfer Protocol)作为互联网上应用最为广泛的一种网络协议,主要用于分布式、协作式和超媒体信息系统的信息交换。本文将深入浅出地介绍HTTP的基本原理,包括其工作方式、特点...

    清华讲义(数据结构 编译原理 微机原理 网络原理 操作系统 )

    它涉及了OSI七层模型和TCP/IP四层模型,网络协议(如HTTP、TCP、UDP)、路由与交换、网络安全等关键知识点。学习网络原理可以让我们深入理解互联网的运作方式,以及如何在网络层面上解决实际问题,这对于未来的网络...

    网络数据交换基本原理培训资料---入门级 交换原理 路由原理

    每一层都有特定的协议,如HTTP用于网页浏览,TCP用于可靠的数据传输,IP用于网络间的寻址和路由,而以太网协议则在数据链路层处理帧的传输。 通过学习这些基础知识,我们可以对网络通信有一个全面的理解,不仅能够...

    IC测试原理解析(第二部分)

    http:www.guangdongdz.com 2006-06-23  芯片测试原理讨论在芯片开发和生产过程中芯片测试的基本原理,一共分为四章,下面将要介绍的是第二章。我们在第一章介绍了芯片的基本测试原理,描述了影响芯片测试方案...

    HTTP网络协议的工作原理

    HTTP网络协议的工作原理,可以增进对网络协议的了解。

Global site tag (gtag.js) - Google Analytics