HTTP概述

HTTP(Hypertext Transfer Protocol超文本传输协议)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它主要是为Web 浏览器与 Web 服务器之间的通信。
HTTP 遵循经典的客户端-服务端(C/S)模型,客户端(Requests,如浏览器)打开一个连接以发出请求,然后等待直到收到服务器端(Responses)响应。

HTTP通信模型.png

参考文档

MDNHTTP、菜鸟教程HTTP

客户端:user-agent

user-agent 就是任何能够为用户发起行为的工具。这个角色通常都是由浏览器移动应用等来扮演。浏览器来负责发送HTTP请求,并进一步解析HTTP返回的消息,以向用户提供明确的响应。

服务器端:Server

Server提供客户端所请求的文档、数据等。Server只是虚拟意义上代表一个机器:它可以是共享负载(负载均衡)的一组服务器组成的计算机集群,也可以是一种复杂的软件,通过向其他计算机(如缓存,数据库服务器,电子商务服务器 ...)发起请求来获取部分或全部资源。

代理:Proxies

在浏览器和服务器之间,有许多计算机和其他设备转发了HTTP消息。它们大多数在传输层、网路层、数据链路层和物理层上,对HTTP应用层是透明的【会影响应用层】。还有一部分是表现在应用层上的,被称为代理(Proxies)。代理(Proxies)既可以表现得透明,又可以不透明(“改变请求”会通过它们)。代理主要有如下几种作用:

  • 缓存(可以是公开的也可以是私有的,像浏览器的缓存)
  • 过滤(像反病毒扫描,家长控制...)
  • 负载均衡(让多个服务器服务不同的请求)
  • 认证(对不同资源进行权限管理)
  • 日志记录(允许存储历史信息)

HTTP的特点:

  • HTTP是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    如果我们需要保持长连接,可以使用websocket进行实现。

在客户端(通常指浏览器)与服务器能够交互(客户端发起请求,服务器返回响应)之前,必须在这两者间建立一个 TCP 连接,打开一个 TCP 连接需要多次往返交换消息(因此耗时)。HTTP/1.0 默认为每一对 HTTP 请求/响应都打开一个单独的 TCP 连接。HTTP/1.1 中TCP连接可以通过Connection头部来进行控制,即多个HTTP请求复用同一个TCP连接。 HTTP/2则发展得更远,通过在一个连接复用消息的方式来让这个连接始终保持为暖连接。
HTTP依赖面向连接的TCP进行消息传递。

  • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

  • HTTP是无状态的:在同一个连接中,两个执行成功的请求之间是没有关系的。HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。

    【无状态的好处】
    1.每次连接传输的数据量小
    2.不需要前面之前的状态获取消息时,响应速度快
    3.如果需要状态保持,我们可以使用HTTP的头部扩展——HTTP Cookies解决无状态这个特征。把Cookies添加到头部中,创建一个会话让每次请求都能共享相同的上下文信息,达成相同的状态。

HTTP流

当http流水线启动时,后续请求都可以不用等待第一个请求的成功响应就能被发送。
第一步:打开或重用一个TCP连接【TCP连接被用来发送一条或多条请求,以及接受响应消息】
第二步:发送一个HTTP报文
第三步:读取服务端返回的报文信息
第四步:关闭TCP连接或为后续请求重用连接。

HTTP报文

HTTP/1.1以及更早的HTTP协议报文都是语义可读的。在HTTP/2中,对这些报文进行压缩,嵌入到了一个新的二进制结构,帧。
有两种HTTP报文类型:请求与响应,每种都有其特定的格式。

请求报文的格式

请求报文的格式.png

一、请求行:

内容 解释
请求方法 如GET、POST、PUT、DELETE、HEAD、OPTIONS
请求路径 获取资源的路径。该Path中没有protocol(http://)、domain(127.0.0.1)、port(80)
HTTP协议版本号 HTTP的协议版本号常用的HTTP/1.0、HTTP/1.1、HTTP/2

二、请求头:

内容 解释
HTTP headers 为服务端表达其他信息的header信息,如Host、content-type等信息

三、空行:

四、请求数据:

内容 解释
数据的格式 常见的数据格式有文本、json等

响应报文的格式

响应报文的格式.png

状态行:

内容 解释
HTTP协议版本 HTTP的协议版本号常用的HTTP/1.0、HTTP/1.1、HTTP/2
状态码 来告知对应请求执行成功或失败,以及失败的原因。常见的状态码有:200、304、404、500
状态信息 是对状态码的描述信息,可以由服务端自行设定。

消息报头:

内容 解释
HTTP headers 与请求类类似

空行:

响应数据:

内容 解释
数据的格式 常见的数据格式有文本、json、图片等

基于HTTP的APIs

客户端向服务端发起请求,服务端被动发送数据。

XMLHttpRequest

作用:XMLHttpRequest(XHR)对象可用于在user_agent和服务器之间交互数据。
介绍:通过XMLHttpRequest可以在不刷新页面的情况下请求特定的URL,获取数据。这允许页面在不影响用户操作的情况下,更新页面的局部内容。

Fetch API

作用:Fetch API提供了一个获取资源的接口(包括跨域请求)

服务端发送的事件,是一种单向服务。

你可能感兴趣的:(HTTP概述)