什么是HTTP协议

超文本传输协议(HyperText Transfer Protocol)定义了客户端如何通过浏览器从资源服务器请求资源,以及服务器如何把资源传送给浏览器。

超文本

文本是指简单的文字字符,在网络中广义的文本指文字、图片、视频、压缩包等。超文本是指文字、图片、视频等文本的混合体,最关键的是可以通过一个超链接,从一个文本跳转到另外一个文本。

HTML就是最常见的超文本,它本身只是纯代码文件,但内部通过标签定义了图片、样式、视频等链接,经过浏览器的解析,就是一个有文字、画面的页面了。

传输

HTTP是一个基于 TCP/IP 通信协议来传输数据的协议,在此基础上对数据格式进行封装,专门用来在两点之间传输数据的约定和规范。HTTP协议是一个双向协议,只要双方都遵守该协议的约定和规范,客户端通过浏览器发送请求给服务端,服务端返回数据经浏览器解析后就可以渲染出来。

HTTP协议格式


请求格式

微信截图_20210720180738.png

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

响应格式

微信截图_20210720181031.png

  1. 响应行:HTTP版本、响应状态码、响应码描述
  2. 响应头:服务器返回数据格式(Content-Type)、服务器响应数据长度(Content-Length)响应时间(Date)
  3. 响应空行
  4. 响应体:服务端响应的数据

GET和POST


GET请求

GET请求的含义是从服务器获取资源,可以是静态文本、图片、视频….. GET请求没有请求体,如果要发送请求数据,则把数据直接附在请求路径中(相当于把数据放在HTTP协议请求头中)GET请求还有以下特点:

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据,不对服务器造成安全问题


POST请求

POST 用于将数据发送到服务器来创建/更新资源。通过 POST 发送到服务器的数据存储在 HTTP 请求的请求主体中,有关 POST 请求的其他特点:

  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求
  • POST请求是新增或提交数据的操作,会修改服务器上的资源,对服务器是不安全的

常见HTTP状态码

微信截图_20210720212522.png

HTTP协议特点


HTTP最突出的优点就是简单、易于扩展、应用广泛和跨平台,其缺点也很明显,无状态、明文传输、不安全

简单
HTTP 基本的报⽂格式就是 header + body ,头部信息也是 key-value 简单⽂本的形式,易于理解,降低了学习和使⽤的门槛。

易于扩展
HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。 同时 HTTP 位于应⽤层,它下层可以随意变化。

应用广泛和跨平台
互联网发展至今,HTTP 的应⽤范围⾮常的⼴泛,从台式机的浏览器(BS模式)到⼿机上的各种APP(CS模式),HTTP 的应⽤⽚地开花,同时天然具有跨平台的优越性。

无状态
无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。 ⽆状态的坏处,既然服务器没有记忆能力,它在完成有关联性的操作(如用户登录>下单>支付)时会非常麻烦,每一次连接请求都需要重新验证信息。

不安全

  1. 通信使用明文(不加密),HTTP 的所有信息都暴露在了光天化⽇下,相当于信息裸奔,在传输的漫⻓的过程中,信息的内容可能会被窃听
  2. 不验证通信方的身份,因此有可能遭遇伪装请求
  3. 无法证明报文的完整性,内容有可能已遭篡改