-
HTTPS
-
中间人攻击, 攻击者分别与通讯两端建立单独联系, 并交换其收到的数据, 使两端认为会话是私密的, 其实全被中间人控制, 防御为HTTPS
-
HTTPS = HTTP + TLS/SSL, HTTP包传递给TLS, 再传递给TCP. HTTPS融合了非对称加密与对称加密, 非对称加密通信仅用于首次交换对称密钥, 之后通信均使用对称加密, 提升速度
-
RSA非对称加密, 私钥自己持有, 公钥所有人持有; 公钥加密, 仅私钥可解密; 私钥加密, 仅公钥可解密
-
如何获取证书: 服务器预先将公钥和网站域名等发给"证书发布机构CA", CA机构也会有自己的公钥和私钥, 其制作出证书(包含服务器公钥), 并用CA自己的私钥加密该证书, 然后再返还给服务器
-
服务器会将自己的证书传递给客户端, 证书中有"证书发布机构CA"+"证书有效期"+"服务器公钥"+"签名"
-
客户端的操作系统存有所有证书发布机构的名称和公钥, 客户端收到服务器证书后, 用对应证书发布机构的公钥解密证书并核实. 通过则使用证书中的公钥加密客户端自己生成的密码key, 用服务器公钥加密后传给服务器
-
服务器用私钥解密, 获得客户端密码key, 后续客户端和服务器间用该key加/解密通信
-
HTTPS可用于数字签名, 具有不可抵赖性(私钥只有客户拥有)与一致性
-
-
HTTP状态码
-
1XX 接收到请求, 正在处理
-
2XX 成功
-
3XX 重定向, 301永久重定向, 302暂时重定向, 304未修改, 客户端可使用缓存
-
4XX 客户端错误, 403客户端无权限访问, 405访问方法不被允许, 408: 客户端关闭了连接
-
5XX 服务器错误, 504网关超时, 500应用服务器异常, 502: web服务器代理至应用服务器异常
-
-
HTTP1.0/1.1/2.0区别
-
HTTP1.1
-
头部增加HOST域, 以支持虚拟主机
-
支持长连接, 一个TCP连接上可以依次传输多个HTTP请求与响应, connection: keep-alive默认开启
-
管线化, 客户端在发送请求后, 不必等待收到响应后再发送下个请求, 而是一次性发送多个请求, 但客户端还是要按序接收响应, 等待时会产生队头阻塞
-
-
HTTP2.0
-
多路复用, 一个TCP连接上可以同时传输多个HTTP请求与响应
-
header压缩
-
服务端推送, 客户端一次请求, 服务器响应一并返回页面中需要的图片/js等资源, 避免客户端多次请求
-
基于HTTPS协议加密传输
-
协议解析使用二进制, 之前是文本
-
-
HTTP3.0 (制定中)
-
-
HTTP概述
-
HTTP方法幂等性: 幂等是指无论执行多次, 都有相同的副作用. GET/PUT/DELETE为幂等, POST为非幂等
-
-
HTTP缓存
-
我们可以认为浏览器中有一缓存数据库, 客户端会先访问缓存数据库, 再访问服务器
-
强制缓存
-
获取数据, 无缓存
-
客户端向缓存数据库请求数据
-
缓存数据库返回未找到数据
-
客户端向服务器请求数据
-
服务器返回响应数据以及缓存规则
-
客户端将响应数据与缓存规则存入缓存数据库
-
-
获取数据, 有缓存
-
客户端向缓存数据库请求数据
-
缓存数据库返回未失效的数据
-
-
[响应字段] Cache-Control: 值, 该字段用于响应字段中, 用于服务器通知客户端缓存
-
值为private或public
-
值为max-age=xxx, 缓存内容在xxx秒后失效
-
值为no-cache, 用对比缓存
-
置为no-store, 不使用缓存
-
-
-
对比缓存
-
获取数据, 无缓存
-
客户端向缓存数据库请求数据
-
缓存数据库返回缓存数据对应的标识
-
客户端向服务器验证标识对应的数据是否失效
-
已失效, 服务器响应数据以及缓存规则
-
客户端将数据以及缓存规则存入缓存数据库
-
-
获取数据, 有缓存
-
客户端向缓存数据库请求数据
-
缓存数据库返回缓存数据对应的标识
-
客户端向服务器验证标识对应的数据是否失效
-
未失效, 服务器响应客户端缓存未失效
-
客户端获取该标识对应的数据
-
-
Last-Modified与If-Modified-Since
-
[响应字段] Last-Modified: 时间, 该资源最后的修改时间
-
[请求字段] If-Modified-Since: 时间, 客户端向服务器请求资源时, 会携带该字段, 服务器会获取请求头中的该字段, 检查如果资源的最后修改日期大于该时间, 则状态码为200, 响应体中有资源的具体数据. 反之, 状态码为304, 响应体为空
-
-
Etag与If-None-Match (优先级高于Last-Modified与If-Modified-Since)
-
[响应字段] Etag: 字符串, 该资源在服务器的唯一标识
-
[请求字段] If-None-Match: 字符串, 客户端向服务器请求资源时, 会携带该字段. 服务器会检查该字段与资源的标识, 如果不同, 则状态码为200, 响应体中有资源的具体数据. 反之, 状态码为304, 响应体为空
-
-
-