四、应用层之HTTP

文章目录

    • 1. 万维网
    • 2. 超文本传送协议HTTP
      • 2.1 HTTP的操作过程
      • 2.2 HTTP1.0/1.1
      • 2.3 HTTP的报文结构

1. 万维网

万维网是一个大规模的、联机式的信息储藏所,英文简称为Web。
万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点(也就是所谓的“链接到另一个站点”),从而主动地按需获取丰富的信息。

万维网是一个分布式的超媒体(hypermedia)系统,它是超文本(hypertext)系统的扩充。

所谓超文本是包含指向其他文档的链接的文本。也就是说,一个超文本由多个信息源链接成,而这些信息源的数目实际上是不受限制的。利用一个链接可使用户找到另一个文档,而这又可链接到其他的文档(依次类推)。这些文档可以位于世界上任何一个接在因特网上的超文本系统中。超文本是万维网的基础。

超媒体与超文本的区别是文档内容不同。超文本文档仅包含文本信息,而超媒体文档还包含其他表示方式的信息,如图形、图像、声音、动画,甚至活动视频图像。

  1. 怎样标志分布在整个因特网上的万维网文档?
    万维网使用统一资源定位符URL (Uniform ResourceLocator)来标志万维网上的各种文档,并使每一个文档在整个因特网的范围内具有唯一的标识符URL。

  2. 用什么样的协议来实现万维网上各种链接?
    为了解决上述的第二个问题,就要使万维网客户程序与万维网服务器程序之间的交互遵守严格的协议,这就是超文本传送协议HTTP (HyperTextTransfer Protocol)。HTTP是一个应用层协议,它使用TCP连接进行可靠的传送。

  3. 怎样使不同作者创作的不同风格的万维网文档,都能在因特网上的各种主机上显示出来,同时使用户清楚地知道在什么地方存在着链接?
    为了解决上述的第三个问题,万维网使用超文本标记语言HTML (HyperTextMarkup Language),使得万维网页面的设计者可以很方便地用链接从本页面的某处链接到因特网上的任何一个万维网页面,并且能够在自己的主机屏幕上将这些页面显示出来。最后,用户可使用搜索工具在万维网上方便地查找所需的信息。

2. 超文本传送协议HTTP

2.1 HTTP的操作过程

HTTP协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的(transaction-oriented)[插图]应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
四、应用层之HTTP_第1张图片
每个万维网网点都有一个服务器进程,它不断地监听TCP的端口80,以便发现是否有浏览器(即万维网客户。请注意,浏览器和万维网客户是同义词)向它发出连接建立请求。一旦监听到连接建立请求并建立了TCP连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP连接就被释放了。在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传送协议HTTP。(和项目一样访问请求的流程)。

用户浏览页面的方法有两种
1)一种方法是在浏览器的地址窗口中键入所要找的页面的URL。
2)另一种方法是在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在因特网上找到所要链接的页面。

面试问题:输入URL后的流程
链接指向了“清华大学院系设置”的页面,其URL是http://www.tsinghua.edu.cn/chn/yxsz/index.htm。下面我们用HTTP/1.0更具体地说明在用户点击鼠标后所发生的几个事件:

  • (1) 浏览器分析链接指向页面的URL。
  • (2) 浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址。
  • (3) 域名系统DNS解析出清华大学服务器的IP地址为166.111.4.100。
  • (4) 浏览器与服务器建立TCP连接(在服务器端IP地址是166.111.4.100,端口是80)。(三次握手)
  • (5) 浏览器发出取文件命令:GET /chn/yxsz/index.htm。
  • (6) 服务器www.tsinghua.edu.cn给出响应,把文件index.htm发送给浏览器。
  • (7) 释放TCP连接。(四次握手
  • (8) 浏览器显示“清华大学院系设置”文件index.htm中的所有文本。

浏览器在下载文件时,可以设置为只下载其中的文本部分。这样可使下载的速度加快。在这种情况下,文件中原来嵌入图像或声音的地方只用一个小图标来显示。用户若要下载这些图像或声音,可用鼠标再分别点击这些图标。每点击一次鼠标,就重复执行一次类似于上面的8个步骤也就是先建立TCP连接,再使用TCP连接传送命令和传送文件,最后释放TCP连接。

HTTP使用了面向连接的TCP作为运输层协议,保证了数据的可靠传输。HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP协议本身是无连接的。这就是说,虽然HTTP使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接

HTTP协议是无状态的(stateless)。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同(假定现在服务器还没有把该页面更新),因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。HTTP的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。

用户在点击鼠标链接某个万维网文档时,HTTP协议首先要和服务器建立TCP连接。这需要使用三次握手。当三次握手的前两部分完成后(即经过了一个RTT时间后),万维网客户就把HTTP请求报文作为三次握手的第三个报文的数据发送给万维网服务器。服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户。
四、应用层之HTTP_第2张图片
请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比)加上两倍往返时间RTT(一个RTT用于连接TCP连接,另一个RTT用于请求和接收万维网文档。这里TCP建立连接的三次握手的第三个报文段中捎带了客户对万维网文档的请求)。

2.2 HTTP1.0/1.1

HTTP1.0
HTTP1.0是短连接,每次请求都会建立TCP连接和断开连接
HTTP/1.0的主要缺点,就是每请求一个文档就要有两倍RTT的开销。若一个主页上有很多链接的对象(如图片等)需要依次进行链接,那么每一次链接下载都导致2×RTT的开销。另一种开销就是万维网客户和服务器为每一次建立新的TCP连接都要分配缓存和变量。特别是万维网服务器往往要同时服务于大量客户的请求,所以这种非持续连接会使万维网服务器的负担很重。好在浏览器都提供了能够打开5~10个并行的TCP连接,而每一个TCP连接处理客户的一个请求。因此,使用并行TCP连接可以缩短响应时间。

HTTP1.1
HTTP1.1采用持续连接的方式(长连接)所谓持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。

HTTP/1.1协议的持续连接有两种工作方式,即非流水线方式(without pipelining)和流水线方式(with pipelining)

因为采用长连接,只有第一次建立TCP连接和请求访问文档需要消耗2个RRT往返时间。在下一次请求访问文档时,因为已经长连接了,不需要再建立TCP连接了,所以这个RRT就不需要加上,只需要响应文档的1次RRT时间即可。

非流水线方式:非流水线方式的特点,是客户在收到前一个响应后才能发出下一个请求。因此,在TCP连接已建立后,客户每访问一次对象都要用去一个往返时间RTT。这比非持续连接要用去两倍RTT的开销,节省了建立TCP连接所需的一个RTT时间。但非流水线方式还是有缺点的,因为服务器在发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。

流水线方式的特点:是客户在收到HTTP的响应报文之前就能够接着发送新的请求报文(等于异步调用)。于是一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。因此,使用流水线方式时,客户访问所有的对象只需花费一个RTT时间。流水线工作方式使TCP连接中的空闲时间减少,提高了下载文档效率。

2.3 HTTP的报文结构

HTTP有两类报文:
(1) 请求报文——从客户向服务器发送请求报文,见图6-12(a)。
(2) 响应报文——从服务器到客户的回答,见图6-12(b)。

由于HTTP是面向文本的(text-oriented),因此在报文中的每一个字段都是一些ASCII码串,因而各个字段的长度都是不确定的
四、应用层之HTTP_第3张图片
HTTP请求报文和响应报文都是由三个部分组成。可以看出,这两种报文格式的区别就是开始行不同

(1) 开始行,用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行(Request-Line),而在响应报文中的开始行叫做状态行(Status-Line)。在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。
(2) 首部行,用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
(3) 实体主体(entity body),在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。

请求报文的第一行“请求行”只有三个内容,即方法请求资源的URL,以及HTTP的版本
四、应用层之HTTP_第4张图片
状态码(Status-Code)都是三位数字的,分为5大类共33种(见RFC 2616)。
1xx表示通知信息的,如请求收到了或正在进行处理。
2xx表示成功,如接受或知道了。
3xx表示重定向,如要完成请求还必须采取进一步的行动。
4xx表示客户的差错,如请求中有错误的语法或不能完成。
5xx表示服务器的差错,如服务器失效无法完成请求。

你可能感兴趣的:(#,计算机网络)