1、http、https、http2的区别
http特点
- 客户端/服务端模式,请求/响应模式
- 无连接:限制每次连接只处理一个请求,通过cookie、session弥补
- 无状态: 无记忆,上次信息下次还需要则要重传
- 简单快速明文
http和https的区别
- https = http + SSL/TLS
- 端口:http:80,https:443
- 耗时:https更慢
- 安全:https更安全
https比http多的一个耗时
- 客户端请求连接https
服务端返回公钥(证书)- 验证公钥,发送一个随机字符串
服务端将随机字符串用私钥加密后返回- 客户端用公钥将加密后的随机字符串解密,如果和原来自己发送的一致则说明服务端是ok的
客户端生成对称加密算法和密钥,通过公钥加密后发出- 此后双方通过上面的对称加密算法和密钥进行通信 更详细的请点击此处
问题
https的数据使用对称加密,密钥是公开的,劫持了怎么办?
http发展历程
- 0.9单行协议
- 1.0构建可扩展性
- 1.1标准化的协议
- 长连接,一个TCP连接上可以传送多个http请求和响应,默认开启keep-alive。但是因为需要按次序进行,存在队头堵塞
- 增加管线化技术,允许在第一个应答被完全发送之前就发送第二个请求,以降低通信延迟。
- 支持响应分块。
- 引入额外的缓存控制机制。(If-Modified-Since,Expires -》 ETag等)
- 引入内容协商机制,包括语言,编码,类型等,并允许客户端和服务器之间约定以最合适的内容进行交换。
- Host头,能够使不同域名配置在同一个IP地址的服务器上。
- 2为了更优异的表现
- 二进制分帧:HTTP/2是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建,改善的优化技术现在可被实施。
- 多路复用:这是一个复用协议。并行的请求能在同一个链接中处理,移除了HTTP/1.x中顺序和阻塞的约束。
- Head压缩:压缩了headers。因为headers在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
- 服务端推送:其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。
- 请求优先级
2、TCP三次握手,四次挥手
三次握手
- 客户端发送请求(服务端确认客户端的发送能力、服务端的接收能力是正常的)
- 服务端返回响应(客户端确认客户端的发送、接收能力,服务端的发送、接收能力是正常的)
- 客户端再发送请求(服务端确认客户端的接收能力、服务端的发送能力是正常的)
四次挥手
- 客户端发送关闭请求,并停止发送数据
- 服务端响应自己已收到,进入关闭等待的状态(客户端收到响应后,等待服务端发送连接释放报文,进入终止等待状态
- 服务端发送完最后的数据后,发送释放连接报文给客户端(最后确认)
- 客户端发送确认关闭(服务端收到后关闭连接)
3、http常用请求头、响应头
请求报文:
- 请求行(request line): GET /index.html HTTP/1.1。
- 请求头(header)
- 空行: 发送回车符和换行符,通知服务器以下不再有请求头。
- 请求数据: get无post有
常用请求头
- Accept:text/html。。。
- Accept-Encoding:gzip。。。
- Accept-Language:zh-CN。。。
- Accept-Charset:utf-8。。。
- Connection: keep-alive。。。
- Host:
- Referer: 请求的上一步的url
- User-Agent: 客户端的软件环境
- 其他对应响应头的看下面哦
响应报文: 状态行、响应头、空行、响应正文
常用响应头
- Content-Length
- Accept-Ranges: bytes(客户端可以分段请求,断点续传,多线程下载),对应请求头Range
- Content-Type
- Content-Encoding
- Expires
- Cache-Control:对应请求头Cache-Control
- Last-Modified:对应请求头If-Modified-Since
- ETag:对应请求头If-None-Match
- Set-Cookie
- Access-Control-Allow-Origin
- Access-Control-Allow-Methods
- Access-Control-Allow-Credentials
Content-Type 实体头部用于指示资源的MIME类型
Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something
常见的媒体格式类型如下:
- text/html : HTML格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/jpeg :jpg图片格式
- image/png:png图片格式 以application开头的媒体格式类型:
- application/xhtml+xml :XHTML格式
- application/xml: XML数据格式
- application/atom+xml :Atom XML聚合格式
- application/json: JSON数据格式
- application/pdf:pdf格式
- application/msword : Word文档格式
- application/octet-stream : 二进制流数据(如常见的文件下载)
- application/x-www-form-urlencoded : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式) 另外一种常见的媒体格式是上传文件之时使用的:
- multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式
4、http缓存
-
强缓存Expires / Cache-Control
直接取缓存,失效了才会重新请求。Cache-Control的no-cache转向协商缓存
-
协商缓存Last-Modified+If-Modified-Since / Etag+If-None-Match
先发起请求向服务器确认,再根据返回的响应是200还是304决定是否读缓存
5、跨域
6、get、post的区别
7、预检请求?
简单请求
不会触发CORS预检的请求。GET、POST、HEAD,还有其他一些条件
预检请求options
- 使用了PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH方法
- 人为设置了非规定内的其他首部字段,参考上面简单请求的安全字段集合,还要特别注意Content-Type的类型
- XMLHttpRequestUpload 对象注册了任何事件监听器
- 请求中使用了ReadableStream对象
8、websocket
全双工通信。服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
(1)建立在 TCP 协议之上,服务器端的实现比较容易。
(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
(3)数据格式比较轻量,性能开销小,通信高效。
(4)可以发送文本,也可以发送二进制数据。
(5)没有同源限制,客户端可以与任意服务器通信。
(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
Connection: Upgrade
Upgrade: websocket
从http升级到websocket的头部
9、http状态码
-
100 客户端应继续其请求
-
101 切换协议
-
200 成功
-
201 成功请求并创建了新的资源
-
203 非授权信息
-
204 无内容
-
206 部分内容
-
301 永久重定向
-
302 临时重定向
-
304 使用缓存
-
305 使用代理
-
400 客户端语法错误
-
401 需要身份认证
-
403 拒绝执行
-
404 找不到
-
408 超时
-
410 资源不存在
-
413 请求实体过大
-
500 服务器内部错误
-
501 服务器不支持
-
502 网关错误
-
503 服务器不可用
10、加密算法
对称加密
加密和解密用的是同一个密钥
优点:算法公开、计算量小、加密速度快、加密效率高。
缺点:在数据传送前,发送方和接收方必须商定好密钥,然后双方保存好密钥。如果一方的密钥被泄露,那么加密信息也就不安全了
使用场景:本地数据加密、https通信、网络传输等
AES(crypto-js)
非对称加密
加密和解密用的不是同一个密钥,一般分公钥和私钥
优点:非对称加密与对称加密相比其安全性更好
缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
使用场景:https会话前期、CA数字证书、信息加密、登录认证等
RSA(jsencrypt)
Hash算法
将任意长度的消息压缩到某一固定长度的消息摘要的函数。
优点:不可逆、易计算、特征化
缺点:可能存在散列冲突
使用场景:文件或字符串一致性校验、数字签名、鉴权协议
md5(JavaScript-MD5)