计算机网络中的WEB和HTTP
2.2.1 Http概况
Web的应用层协议是超文本传输协议(Http),它是Web的核心。Http由两个程序实现,一个是客户端,一个是服务端。它们运行在不同的端系统中,通过交换HTTP报文进行通信。
Web页面是由对象组成的。一个对象只是一个文件(下面会举例)。多数Web页面会有一个HTML基本文件以及几个引用的对象。比如一个网页中有一个HTML文件和五张图片,则这个WEB页面有六个对象。HTML基本文件通过对象的URL地址引用页面中的其他对象。每个URL由两个部分组成:存放对象的主机名和对象在主机中的路径名。
WEB浏览器实现了HTTP的客户端,使得客户可以使用WEB应用。而WEB服务器实现了WEB的服务端。
HTTP定义了WEB客户向WEB服务器请求WEB页面的方式,以及服务器向客户端发送页面的方式。当用户请求一个WEB页面的时候,浏览器向服务器发出对该页面中所包含的对象的HTTP请求报文,服务器接收到请求并且用包含这些对象的HTTP响应报文进行响应。
HTTP使用TCP协议作为它的支撑运输协议。
2.2.2 非持续连接和持续连接
非持续连接:每个请求/响应是通过不同的TCP连接去发送的。其中每个TCP连接在服务器发送一个对象后关闭。缺点:第一,必须为每一个请求对象建立和维护一个全新的连接,这给WEB服务器带来了严重的负担;第二,每个对象经受两倍的RTT的交付时延,也就是说一个RTT用于创建TCP。另一个用于请求和接收一个对象。
持续连接:每个请求/响应是通过同一个TCP连接发送的。服务器在发送响应后保持该TCP连接打开,在相同的客户和服务端之间,后续的请求和响应报文能够通过相同的TCP连接进行传送。在这种情况下,当一条TCP连接超过一定时间不使用(这个可以在服务器上配置参数)则会被关闭。
在默认情况下HTTP采用持续连接
2.2.3 HTTP报文格式
1.HTTP请求报文
以下为请求报文示例
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
User-agent:Mozilla/5.0
Accept-language:fr
上面第一行称之为请求行,有三个字段,依次是:方法字段,URL字段,HTTP版本字段。方法字段包括:GET,POST,PUT,HEAD和DELETE。URL字段带有请求对象标识,本例中URL对象正在请求/somedir/page.html。
剩下的行称为首部行,Host指明了对象所在的主机,User-Agent指明了向服务器发送请求的浏览器类型,Accept-Language指明了用户想得到的语言版本。
一个请求报文在首部行后会有个实体体,当方法为GET的时候实体体为空。当使用POST方法的时候才会使用该实体体。当用户提交表单时,HTTP经常会使用POST方法,比如当用户向搜索引擎输入搜索关键字的时候。使用POST报文,用户仍可以向服务器请求一个WEB页面,但WEB页面的特定内容依赖于用户在表单字段中输入的内容,比如搜索引擎会依靠用户输入的表单内容显示特定内容。
GET也可以传输少量用户输入的信息,它将需要传输的内容放在了URL中,比如说www.somesite.com/animalsearch? banana&monkey。这种就传输了monkey和banana。这种方法传输的信息很少,也不具备保密性。
PUT允许用户上传对象到指定的WEB服务器上的指定路径中
DELETE允许用户删除指定WEB服务器上的指定路径中的对象
HEAD类似于GET,当服务器收到一个HEAD方法的请求的时候,会使用一个HTTP报文进行响应但是并不返回请求对象。多用于进行调试跟踪的时候
2.HTTP响应报文
以下为响应报文示例
HTTP/1.1 200 OK
Connection: close
Data: Tue, 18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data)
响应报文有三个部分组成:一个为初始状态行,6个首部行,然后是实体体。
状态行有三个字段:协议版本字段、状态码和相应状态信息
首部行中:Connection: close告诉客户发送完报文后将关闭该TCP连接
Date:指示服务器产生并且发送该响应报文的时间和日期
Server:指示报文是由什么服务器产生的,例子中是由Apache Web产生的
Last-Modified:指示了对象创建或者最后修改的时间日期
Content-Length:指示了被发送对象的字节数
Content-Type:指示实体体中的对象类型
2.2.4用户与服务器交互:cookie
cookie技术有四大组件:①在HTTP响应报文中的一个cookie首部行②在HTTP请求报文中的一个cookie首部行③在用户端系统中保留有一个cookie文件④位于Web站点的一个后端数据库
cookie可用于标识一个用户,其关键在于cookie在无状态的HTTP之上建立了一个用户会话层。但是cookie可能会侵犯用户隐私
2.2.5Web缓存
Web缓存,又称为代理服务器。
Web缓存器有自己的磁盘存储空间,并且在存储空间中保存最近请求过的对象的副本。一旦浏览器被配置,每个对象的浏览器请求会首先被定向到该WEB缓存器,而不需要在向服务器发送请求。
WEB缓存器一般由ISP购买和安装。比如一所大学可能在它的校园网上安装一台存储器,并且将所有校园网上的用户浏览器配置为指向它。
在因特网上部署WEB缓存器有两个好处:①WEB缓存器可以大大减少队客户请求的响应时间 ②WEB缓存器可以减少一个机构接入链路到因特网的通信量,从而降低费用。
通过使用内容分发网络(CDN),WEB缓存器正在因特网中发挥着越来越重要的作用。CDN公司在因特网上安装了许多地理上分散的缓存器,因而使大量流量实现了本地化。
2.2.6条件GET方法
尽管高速缓存能够减少用户感受到的响应时间,但也引入了一个新问题,也就是存放在缓存器中的对象副本可能是陈旧的,也就是说保存在缓存器器中的对象自该副本缓存在客户上可能已经被修改了。
但是HTTP中的条件GET方法,如果请求报文是GET方法,并且在请求报文中包含一个“If-Modified-Since"首部行,则该报文为条件GET请求报文。条件GET可以检查在缓存器中的副本是否是旧的。