HTTP协议概述

Scroll Down

HTTP协议概述

HTTP协议介绍

http协议称为-超文本传输协议

URL-统一资源定位器

Scheme://host:port/path-**协议://域名:端口/资源路径**

HTTP版本:

​ 1.0: RFC 1945
​ 1.1: RFC 2068

####使用TCP传输服务

  • 服务器在80端口等待客户的请求
  • 浏览器发起到服务器的TCP连接(创建套接字Socket)
  • 服务器接受来自浏览器的TCP连接
  • 浏览器(HTTP客户端)与Web服务器(Http服务器)交换HTTP消息
  • 关闭TCP连接

####无状态

服务器不维护任何有关客户端过去所发请求的信息

为什么HTTP要用无状态的协议?

有状态的协议更复杂:
需维护状态( 历史信息),如果客户或服务器失效,会产生状态的不一致,解决这种不一致代价高

HTTP连接的两种类型

####非持久性连接(Nonpersistent HTTP)

每个TCP连接最多允许传输一个对象

HTTP1.0版本使用非持久性连接

####持久性连接(Persistent HTTP)

每个TCP连接最多允许传输多个对象

HTTP1.1版本使用持久性连接

####非持久性连接的访问过程

非持久性连接响应时间分析与建模

RTT(Round Trip Time)

​ 从客户端发送很小的一个数据包到服务器并返回所经历的时间

响应时间

  • 发起,建立TCP连接:1个RTT
  • 发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RTT
  • 响应消息中所含文件/对象传输时间

非持久性连接获取一个对象所需时间为:

image-20200201230611071

总时间 = 2RTT+文件发送时间

非持久性连接的问题
  • 每个对象需要2个RTT
  • 操作系统需要为每个TCP连接开销资源
  • 如果并行建立多个TCP连接会导致服务端压力过大

持久性连接的优势与时间分析

  • 发送响应后,服务器保持TCP连接的打开
  • 后续的HTTP消息可以通过该TCP连接直接发送

带有流水机制的持久性连接:
HTTP1.1的默认选项
​ 客户端只需要遇到一个引用对象就尽快发出请求
​ 理想情况下,收到所有的对象只需要耗时一个RTT
持久性连接总时间 = 3RTT(2个网页RTT+1个并行多个对象的RTT)+文件发送时间

HTTP消息格式

HTTP协议有两类消息
请求消息(request)
响应消息(response)

HTTP请求消息

image-20200201231642597

请求行由三部分构成:
  1. 请求方法:是一个动词,如 GET/POST,表示对资源的
    操作;
  2. 请求目标:通常是一个 URI,标记了请求方法要操作的资
    源;
  3. 版本号:表示报文使用的 HTTP 协议版本。
请求行

Host:请求域名

为什么已经建立了TCP连接,还需要带上域名呢?
使用缓存和代理服务器的时候需要带上该信息

User-agent:浏览器类型版本,针对不同的浏览器服务端可能会有不同的处理方式

Connection:发完这个连接后关闭

Accept-language:期望的语言,从提供服务的角度,他可以准备多个版本语言的资源,返回对应语言资源的版本

最后一个空行,结束

####HTTP请求和响应消息的通用格式

请求消息:

image-20200202120632915

响应消息:image-20200202120656463