应用层协议,由请求和响应构成,是标准的客户端服务器模型

特点

  • 无连接,限制每次连接只处理一个请求
  • 无状态,协议对于事务处理没有记忆能力
  • 简单快速
  • 灵活 允许传输任意类型的数据对象,由Content-Type标识

请求报文

  • 请求行 请求类型-要访问的资源-HTTP协议版本号
  • 请求头 说明服务器要使用的附加信息
  • 空行 分割请求头和请求体
  • 请求体 任意类型的数据


响应报文

  • 状态行 状态码-状态信息-HTTP协议版本号
  • 响应头 说明客户端要使用的附加信息
  • 响应体 客户端需要的资源

Post 和 Get 的区别

  • get请求可以缓存响应体,post不可以
  • post请求相对get请求安全一些,get请求url包含信息、会被浏览器记录
  • post请求可以通过Request.body传输更多类型的数据,formdata,二进制,json

HTTP 持久连接(HTTP1.1 支持)

Conection: keep-alive 不关闭底层的 TCP 连接,避免重新建立连接

HTTP 管线化 (HTTP1.1 支持)

管线化后,请求和响应不再是依次交替的了。可以支持一次性发送多个请求,并一次性接收多个响应
只有 get 与 head 请求可以进行管线化,POST 有限制
初次创建连接时不应该启动管线机制,因为服务器不一定支持该协议

HTTP 数据协商

请求

  • Accept 在请求中使用 Accept 可申明想要的数据格式
  • Accept-Encoding 告诉服务端使用什么的方式来进行压缩 gzip、deflate、br
  • Accept-Language 描述语言信息
  • User-Agent 用来描述客户端浏览器相关信息,可以用来区分 PC 端页面和移动端页面

    响应

  • Content-Type 对应 Accept,从请求中的 Accept 支持的数据格式中选一种来返回

  • Content-Encoding 对应 Accept-Encoding,指服务端到底使用的是那种压缩方式
  • Content-Language 对应 Accept-Language

HTTP 首部

通用字段 作用
Cache-Control 控制缓存的行为
Connection 浏览器想要优先使用的连接类型,比如 keep-alive
Date 创建报文时间
Pragma 报文指令
Via 代理服务器相关信息
Transfer-Encoding 传输编码方式
Upgrade 要求客户端升级协议
Warning 在内容中可能存在错误
请求字段 作用
Accept 能正确接收的媒体类型
Accept-Charset 能正确接收的字符集
Accept-Encoding 能正确接收的编码格式列表
Accept-Language 能正确接收的语言列表
Expect 期待服务端的指定行为
From 请求方邮箱地址
Host 服务器的域名
If-Match 两端资源标记比较
If-Modified-Since 本地资源未修改返回 304(比较时间)
If-None-Match 本地资源未修改返回 304(比较标记)
User-Agent 客户端信息
Max-Forwards 限制可被代理及网关转发的次数
Proxy-Authorization 向代理服务器发送验证信息
Range 请求某个内容的一部分
Referer 表示浏览器所访问的前一个页面
TE 传输编码方式
响应字段 作用
Accept-Ranges 是否支持某些种类的范围
Age 资源在代理缓存中存在的时间
ETag 资源标识
Location 客户端重定向到某个 URL
Proxy-Authenticate 向代理服务器发送验证信息
Server 服务器名字
WWW-Authenticate 获取资源需要的验证信息
实体字段 作用
Allow 资源的正确请求方式
Content-Encoding 内容的编码格式
Content-Language 内容使用的语言
Content-Length request body 长度
Content-Location 返回数据的备用地址
Content-MD5 Base64 加密格式的内容 MD5 检验值
Content-Range 内容的位置范围
Content-Type 内容的媒体类型
Expires 内容的过期时间
Last_modified 内容的最后修改时间