定义
超文本传输协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。
特点
遵循经典的客户端-服务端模型
无状态协议,服务器不会在两个请求之间保留任何数据(状态)
基于TCP/IP层
客户端和服务端通过交换各自的消息来交互。由像浏览器这样的客户端发出的消息叫做 requests,被服务端响应的消息叫做 responses。
用途
传输超文本文档
传输图片、视频
向服务器发送HTML表单
根据网页请求,获取部分web文档内容更新网页
HTTP的组件系统
客户端
user-agent 客户端通常由浏览器来扮演
作为一个发起请求的实体
客户端展现网页的过程
客户端首先发起一个请求来获取页面的HTML文档,然后解析其中的资源信息发送其它请求,获取到CSS和执行脚本来渲染页面布局,以及一些其它页面资源(图片、视频等)。浏览器把这些资源整合在一起,就构成了一个完整的文档,即网页。
服务端
来服务并提供给客户端web文档。虚拟上理解为一个机器,实际上可以是很多计算机组成的计算机集群,或者是大型的数据中心(数万到数十万台机器)。
代理
在浏览器和服务器之间有许多计算机和其它设备转发了HTTP消息。表现在应用层的被称为代理。
代理的作用
缓存(可以是公开的也可以是私有的,像浏览器的缓存)
过滤
负载均衡
认证
日志记录
HTTP的基本性质
HTTP是简单的
大体上设计的简单易读,报文能够人为读懂。
HTTP是可拓展的
在 HTTP/1.0 中出现的 HTTP headers 让协议扩展变得非常容易。只要服务端和客户端就新 headers 达成语义一致,新功能就可以被轻松加入进来。
HTTP是无状态,有会话的
HTTP是无状态的:在同一个连接中,两个执行成功的请求之间是没有关系的,使用Cookies可以创建有状态的会话。
HTTP和连接
HTTP是基于传输层的TCP协议,TCP是面向连接的。在每次通信过程中,客户端会和服务端建立TCP连接。
HTTP流
当客户端想和服务端进行交互时,过程如下:
1.打开一个TCP连接,被用来发送一条或者多条请求,用来接收响应消息。
2.发送一个HTTP报文
3.读取服务端响应的报文信息
4.关闭连接或者为后续请求重用连接
HTTP报文
HTTP请求
一个HTTP的method,经常由一个动词或者名词来定义客户端的行为。常用的有GET,POST,HEADER,OPTION。
path:获取资源的路径
HTTP协议版本号
为服务端表达其它信息的头部headers
对于像post这样的方法,报文的body就包含了发送的信息。
HTTP响应
HTTP协议版本号
一个状态码,告诉客户端请求成功或者失败,以及失败的原因。
个状态信息,这个信息是非权威的状态码描述信息,可以由服务端自行设定。
HTTP headers,与请求头部类似。
可选项,比起请求报文,响应报文中更常见地包含获取的资源body。
基于HTTP的APIs
基于HTTP的最常用API是 XMLHttpRequest API,可用于在客户端和服务器之间交换数据。