为什么要了解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算法和加密算法
- 服务端存在一对非对称加密的钥匙,服务端发送公钥和证书到客户端
- 客户端根据证书验证网站是否合法,合法会生成对称密钥
- 通过服务端公钥加密对称密钥,然后发送给服务端
- 服务端和客户端通过对称密钥进行加密传输