计算机网络(四):应用层之HTTP协议

计算机网络(四):应用层之HTTP协议

一、超文本传输协议(HTTP)定义
超文本传输协议(HTTP)是一种用来定义客户服务器程序如何编写和如何从万维网获取网页的协议。一个HTTP客户发送一个请求,HTTP服务器返回响应。
服务器使用80端口,客户使用一个临时端口号。HTTP使用TCP服务,TCP是一种面向连接的可靠协议。这意味着,在客户和服务器进行任何事务之前,它们之间必须建立连接。在事务之后,连接应当终止。
计算机网络(四):应用层之HTTP协议
客户和服务器不需要担心交换报文中的差错以及报文的丢失,TCP是可靠的并且处理了这个问题。

二、HTTP的非持续和持续连接
嵌入到网页中的超文本概念可能需要多个请求和应答,如果网页位于不同的服务器,那么每获取一个对象就需要建立一个新的TCP连接。如果这些对象位于同一个服务器,那么有两种情况:非持续连接和持续连接。

  1. 非持续连接
    非持续连接对于每个对象,都创建一个新的TCP连接获取对象。在HTTP1.1版之前指定的是非连续连接。
    在非连续连接中,一个TCP连接被每一组请求/应答所创建。该策略的步骤如下:
     客户开启一个TCP连接并发送请求
     服务器发送响应数据并关闭连接
    客户读取数据知道它遇到文件结束标记,然后关闭连接
    一个非连续连接的例子如下所示。
    计算机网络(四):应用层之HTTP协议
    在这种策略中,如果文件包含了N个位于不同文件的图片连接(位于同一台服务器),那么必须开启和关闭连接N+1次。非持续连接策略给服务器带来了高额的开销,因为每次连接被开启时服务器都需要N+1个不同的缓冲区。
  2. 持续连接
    持续连接是创建一个TCP连接获取全部对象。HTTP1.1默认指定为持续连接,可以被用户改变。在持续连接中服务器在发送一个响应后,为响应更多请求而将连接置位打开状态服务器可以在客户的请求下或者在超时情况下将连接关闭
    计算机网络(四):应用层之HTTP协议

三、HTTP的报文格式
HTTP协议定义了请求报文和响应报文的格式,如下图所示。
计算机网络(四):应用层之HTTP协议

  1. 请求报文
    请求报文格式分为:请求行、请求头部(首部行)以及主体三个部分。
    请求行中包含了三个字段:方法、URL以及版本,如表所示为HTTP1.1版中的方法。绝大多数情况下,客户使用GET方法发送请求,这种情况下报文主体为空。
    计算机网络(四):应用层之HTTP协议
    在请求行之后,可以有一个或者多个请求头部行,每个头部行都从客户端向服务器发送额外的信息。常见的请求头部名称如下表所示。
    计算机网络(四):应用层之HTTP协议
  2. 响应报文
    响应报文格式分为:状态行、响应头部(首部行)以及主体三个部分。
    状态行中的状态码定义了请求的状态,在100范围内只代表一个报告,在200范围内的代码代表这是一个成功的请求,在300范围内的代码代表把客户端重定向到另一个URL,在400范围内的代码代表客户端发生了错误,在500范围内的代码代表错误发生在服务器。状态短语以文本格式解释状态码
    响应头部中,每一个头部行都从服务器向客户端发送额外的信息,常见的响应头部名称如下表所示。
    计算机网络(四):应用层之HTTP协议
    **响应主体包含了从服务器发送给客户的文档,**除非响应是一个错误报文,否则主体是存在的。
    计算机网络(四):应用层之HTTP协议

四、Cookie
随着Web功能的增加,如电子商店运行客户在店内浏览,选择商品,放到电子购物车,最后使用信用卡消费等这类功能,使得cookie机制诞生。

  1. 创建和存储Cookie
    当服务器从客户端接收到请求后,它将客户端的信息存储在文件或字符串中。这些信息可能包含客户端的域名cookie内容(服务器搜集到的关于客户端的信息,如主机名、注册号等)、时间戳以及实现有关的其他信息
    服务器在响应中包含了它发送给客户端的cookie
    当客户端接收到响应后,浏览器在cookie目录中存储cookie,并根据服务器域名进行分类。
    计算机网络(四):应用层之HTTP协议
  2. 使用Cookie
    当客户向服务器发送请求时,浏览器在cookie目录中查询是否有从那个服务器发送过来的cookie。如果有,则在请求中包含这个cookie。当服务器接收到这个请求后,它就知道这是一个老客户,而不是新的。
    注意,cookie的内容从来不让浏览器读取或者透露给用户,只由服务器创建并回收cookie

五、万维网高速缓存:代理服务器

  1. 代理服务器(proxy server)
    HTTP支持代理服务器。代理服务器是一台计算机,能够保存最近请求的响应的副本。HTTP客户端向代理服务器发送请求,代理服务器检查本地高速缓存,如果高速缓存中不存在响应报文,代理服务器就向相应的服务器发送请求。返回的响应会发送到代理服务器中,并且进行存储,以用于其他客户端将来的请求。
    代理服务器降低了原服务器的负载,减少了通信量并降低了延迟。但是,为了使用代理服务器,必须配置客户端访问代理服务器而不是目标服务器。
    计算机网络(四):应用层之HTTP协议
  2. 缓存更新
    计算机网络(四):应用层之HTTP协议
    一个重要的问题是一个响应在被删除或替换之前,应该在代理服务器保持多长时间
    一个解决方法是保存站点列表,这些站点的信息保存一段时间。另一个方法是加入一些头部信息来显示信息的最近修改时间。
  3. HTTP安全
    HTTP本质上并不提供安全。但是在HTTP可以在安全套接层(SSL)上运行,在这种情况下,HTTP称为HTTPS。HTTPS提供保密性、客户和服务器鉴别以及数据完整性。

参考资料:《计算机网络教程:自顶向下方法》