我和http的那些事

198 阅读4分钟

为什么要了解http,首先是应付面试很多都会问,其次是对计算机网络有更清楚的认识,接下来我会简单讲解一下http1.0,1.1,2.0以及https

http相关知识

请求方法

  • GET:通常获取数据和文件资源
  • POST:添加数据或资源
  • PUT:替换数据或资源
  • PATCH:局部替换数据
  • DELETE:删除文件或资源
  • OPTIONS:预检复杂请求下是否支持跨域
  • HEAD:请求资源的头部信息, 并且这些头部与 HTTP GET ⽅法请求时返回的⼀致. 该请求⽅法的⼀个使⽤场景是在 下载⼀个⼤⽂件前先获取其⼤⼩再决定是否要下载, 以此可以节约带宽资源
  • CONNECT: HTTP/1.1协议中预留给能够将连接改为管道⽅式的代理服务器
  • TRACE: 回显服务器收到的请求,主要⽤于测试或诊断

请求报文组成

  • 请求行:请求方法 请求路径 请求协议 如:GET /index.html http/1.1
  • 请求头:请求的各个键值对,如Accept:text/html
  • 空行(请求头和请求体隔开)
  • 请求体:客户端发送的数据(如浏览器,app)

响应报文组成

  • 响应行:响应协议 状态码 状态信息 如:http/1.1 200 OK
  • 响应头:类请求头
  • 空行
  • 响应体:服务端发送的数据

请求首部字段

  • Accept 客户端或者代理能够处理的媒体类型
  • Accept-Encoding 优先可处理的编码格式
  • Accept-Language 优先可处理的⾃然语⾔
  • Accept-Charset 优先可以处理的字符集
  • If-Match ⽐较实体标记(ETage)
  • If-None-Match ⽐较实体标记(ETage)与 If-Match相反
  • If-Modified-Since ⽐较资源更新时间(Last-Modified)
  • If-Unmodified-Since⽐较资源更新时间(Last-Modified),与 If-Modified-Since相反
  • If-Rnages 资源未更新时发送实体byte的范围请求
  • Range 实体的字节范围请求
  • Authorization web的认证信息
  • Proxy-Authorization 代理服务器要求web认证信息
  • Host 请求资源所在服务器
  • From ⽤户的邮箱地址
  • User-Agent 客户端程序信息
  • Max-Forwrads 最⼤的逐跳次数
  • TE 传输编码的优先级
  • Referer 请求原始放的url
  • Expect 期待服务器的特定⾏为

响应⾸部字段

  • Accept-Ranges 能接受的字节范围
  • Age 推算资源创建经过时间
  • Location 令客户端重定向的URI
  • vary 代理服务器的缓存信息
  • ETag 能够表示资源唯⼀资源的字符串
  • WWW-Authenticate 服务器要求客户端的验证信息
  • Proxy-Authenticate 代理服务器要求客户端的验证信息
  • Server 服务器的信息
  • Retry-After 和状态码503 ⼀起使⽤的⾸部字段,表示下次请求服务器的时间

实体⾸部字段

  • Allow 资源可⽀持http请求的⽅法
  • Content-Language 实体的资源语⾔
  • Content-Encoding 实体的编码格式
  • Content-Length 实体的⼤⼩(字节)
  • Content-Type 实体媒体类型

http1.1

http1.0就不多提了,下面讲讲http1.1

  • 在http1.0的基础上新增了PUT、DELETE、OPTIONS、TRACE、CONNECT
  • 支持长连接(默认开启Connection:keep-alive),也就是tcp在一次交互之后不会关闭,而是持续进行传输响应
  • 分块传输编码:数据被拆分依次传送

http2.0

  • 服务端推送:当客户端请求之后,服务端会自动推送css,html文件,无需请求
  • 多路复用:一个tcp可以并行多次请求,提高效率
  • 二进制分帧:解析效率更高
  • 请求优先级:对请求的优先级进行标识
  • 请求头按需加载:客户端和服务端分别缓存一张表,按需加载请求字段
  • 请求头压缩:通过hpack进行加密

https

简单说一下流程

  • 客户端发送自带的hash算法和加密算法
  • 服务端存在一对非对称加密的钥匙,服务端发送公钥和证书到客户端
  • 客户端根据证书验证网站是否合法,合法会生成对称密钥
  • 通过服务端公钥加密对称密钥,然后发送给服务端
  • 服务端和客户端通过对称密钥进行加密传输