一.https原理及流程
HTTPS其实是有两部分组成:HTTP + SSL / TLS,
也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据而HTTP传输的数据都是明文的
- 客户端发起请求
- 服务端配置证书
- 证书传输给客户端, 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
- 客户端解析证书,并生成一个用于对内容加密的客户端密钥,然后用服务器的公钥对客户端的密钥进行加密
- 客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
- 服务器接收到密文后 会用自己的服务端的密钥对密文进行解密, 然后用客户端的密钥对明文加密
- 服务端将加密后的密文传输给客户端
- 客户端接收到密文 进行解密获取明文
https://www.jianshu.com/p/14cd2c9d2cd2
二.http各个版本的区别
http0.9
最初的版本, 只有一个GET方法
http1.0
- 新增了POST和HEAD方法
- 每个TCP连接只能发送一个请求, 发送数据完毕,连接就关闭
- 头部信息时SCII码,后面数据可为任何形式,服务器回应时,会告诉客户端数据是什么形式,即content-type字段的作用,常见的content-type值有
Content-Type: text/plain;charset=UTF-8
content-type: text/html; charset=UTF-8
Content-Type: text/xml;charset=UTF-8
content-type: image/jpeg; charset=UTF-8
content-type: image/png; charset=UTF-8
content-type: image/gif; charset=UTF-8
http1.1
- 新增PUT, PATCH, OPTIONS, DELETE方法
- 新增了持久连接, 即TCP不会 默认关闭,可以被多个请求服用,connection: keep-alive, 对于同一个域名, 大多数浏览器允许同时建立6个持久连接并引入了管道机制,在同一个TCP链接里,客户端可以同时发送多个请求,改善HTTP协议效率
- 新增24个错误状态码
http2.0
- 头部信息和数据体都是二进制
- 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或响应,且不用按顺序一一对应
- 允许服务器未经请求,主动向客户端发送资源, 即服务器推送
- 头部信息压缩
http1.1的长连接和http2.0的多路复用的区别?
http1.1之前一次请求就会建立一次连接,http1.1通过管道化方式实现多个请求串行化共享同一个连接,但是一旦某个请求耗时严重,就导致后面的请求被阻塞,俗称线头阻塞;
http2.0多个请求共享同一个连接,并且是并行的,所有请求不会影响其他请求;
三.一个完整的http请求过程
域名解析 --> 发起TCP3次握手 --> 简历TCP连接后发起HTTP请求 --> 服务器响应HTTP请求 --> 浏览器解析数据,渲染页面
http请求状态码
http请求结构
http请求头各部分含义
常用的请求方法有哪些
- get:从服务器请求指定资源,不会产生非幂等的副作用
- head: 和get请求一样从服务器获取资源,但是不返回资源的内容部分,只返回服务的响应头
- post:用于向服务器提交提交数据,更新资源,会产生非幂等的副作用
- put:上传完整的资源到服务进行整体更新
- delete:删除指定资源
- trace:测试或诊断服务收到的请求信息,所以会返回你发送的请求内容
- options:测试服务支持所有请求的方法,返回响应的内容为
- patch:和put一样用于对资源的更新,区别如下:
put是对资源的整体更新,patch是部分更新;
put只会对已存在的资源进行更新,patch在资源不存在时会创建新的资源;