什么是HTTP协议
超文本传输协议(HyperText Transfer Protocol)定义了客户端如何通过浏览器从资源服务器请求资源,以及服务器如何把资源传送给浏览器。
超文本
文本是指简单的文字字符,在网络中广义的文本指文字、图片、视频、压缩包等。超文本是指文字、图片、视频等文本的混合体,最关键的是可以通过一个超链接,从一个文本跳转到另外一个文本。
HTML就是最常见的超文本,它本身只是纯代码文件,但内部通过标签定义了图片、样式、视频等链接,经过浏览器的解析,就是一个有文字、画面的页面了。
传输
HTTP是一个基于 TCP/IP 通信协议来传输数据的协议,在此基础上对数据格式进行封装,专门用来在两点之间传输数据的约定和规范。HTTP协议是一个双向协议,只要双方都遵守该协议的约定和规范,客户端通过浏览器发送请求给服务端,服务端返回数据经浏览器解析后就可以渲染出来。
HTTP协议格式
请求格式

- 请求行:表明请求方式(GET、POST)、请求路径、HTTP版本
- 请求头:通过”K: V”的方式,包含请求服务器域名(Host),客户端接收的文本格式(Accept)、压缩方法(Accept-Encoding),客户端浏览器版本信息(User-Agent)…..
- 请求空行
- 请求体:封装用户POST请求信息(GET请求没有请求体)
响应格式

- 响应行:HTTP版本、响应状态码、响应码描述
- 响应头:服务器返回数据格式(Content-Type)、服务器响应数据长度(Content-Length)响应时间(Date)
- 响应空行
- 响应体:服务端响应的数据
GET和POST
GET请求
GET请求的含义是从服务器获取资源,可以是静态文本、图片、视频….. GET请求没有请求体,如果要发送请求数据,则把数据直接附在请求路径中(相当于把数据放在HTTP协议请求头中)GET请求还有以下特点:
- GET 请求可被缓存
- GET 请求保留在浏览器历史记录中
- GET 请求可被收藏为书签
- GET 请求不应在处理敏感数据时使用
- GET 请求有长度限制
- GET 请求只应当用于取回数据,不对服务器造成安全问题
POST请求
POST 用于将数据发送到服务器来创建/更新资源。通过 POST 发送到服务器的数据存储在 HTTP 请求的请求主体中,有关 POST 请求的其他特点:
- POST 请求不会被缓存
- POST 请求不会保留在浏览器历史记录中
- POST 不能被收藏为书签
- POST 请求对数据长度没有要求
- POST请求是新增或提交数据的操作,会修改服务器上的资源,对服务器是不安全的
常见HTTP状态码

HTTP协议特点
HTTP最突出的优点就是简单、易于扩展、应用广泛和跨平台,其缺点也很明显,无状态、明文传输、不安全
简单
HTTP 基本的报⽂格式就是 header + body ,头部信息也是 key-value 简单⽂本的形式,易于理解,降低了学习和使⽤的门槛。
易于扩展
HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。 同时 HTTP 位于应⽤层,它下层可以随意变化。
应用广泛和跨平台
互联网发展至今,HTTP 的应⽤范围⾮常的⼴泛,从台式机的浏览器(BS模式)到⼿机上的各种APP(CS模式),HTTP 的应⽤⽚地开花,同时天然具有跨平台的优越性。
无状态
无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。 ⽆状态的坏处,既然服务器没有记忆能力,它在完成有关联性的操作(如用户登录>下单>支付)时会非常麻烦,每一次连接请求都需要重新验证信息。
不安全
- 通信使用明文(不加密),HTTP 的所有信息都暴露在了光天化⽇下,相当于信息裸奔,在传输的漫⻓的过程中,信息的内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装请求
- 无法证明报文的完整性,内容有可能已遭篡改
