这是我参与「第四届青训营 」笔记创作活动的第3天
什么是HTTP、其基本特点
- Hyper Text Transfer Protocol 超文本传输协议
- 应用层协议,基于TCP协议
- 请求,响应
- 简单可扩展
- 无状态
HTTP发展
- HTTP/1.0(构建可扩展性):增加了Header,有了状态码,支持多种文档类型
- HTTP/1.1(标准化协议):连接复用、缓存、内容协商
- HTTP/2(更优异的表现):二进制协议、压缩header、服务器推送
协议分析——报文
-
Method:
Method GET:请求一个指定资源的表示形式,使用GET请求应该只被用于获取数据 POST:用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用 PUT:用请求有效载荷替换目标资源的所有当前表示 DELETE:删除制定的资源 HEAD:请求一个与GET请求的响应相同的响应,但没有响应体 CONNECT:建立一个到由目标资源标识的服务器隧道 OPTIONS:用于描述目标资源的通信选项 TRACE:沿着到目标资源的路径执行一个消息环回测试 PATCH:用于对资源应用部分修改 - safe(安全的):不会修改服务器数据的方法 GET HEAD OPTIONS
- Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,所有safe的方法都是Idempotent的 GET、HEAD、OPTIONS、PUT、DELETE
状态码
- 200 :OK-客户端请求成功
- 301:资源(网页等)被永久转移到其他URL
- 302:临时跳转
- 401:Unauthorized-请求未经授权
- 404:请求资源不存在,可能是输入了错误的URL
- 500:服务器内部发生了不可预期的错误
- 504:Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应
RESTful API
-
RESTful API:一种API设计风格;REST 表现层状态转化
-
遵循以下几点
- 每一个URL代表一种资源
- 客户端和服务器之间,传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器资源进行操作,实现“表现层状态转化”
缓存
-
强缓存:
-
Expires 时间戳
-
Cache-Control
- 可缓存性:no-cache:协商缓存验证
no-store:不使用任何缓存
- 到期:max-age:单位是秒,存储的最大周期,相对于请求的时间
- 重新验证*重新加载:must-revalidate:一旦资源过期,在成功向原始服务器验证之前,不能使用
-
-
协商缓存:
- Etag/If-None-Match:资源的特定版本的标识符,类似于指纹
- Last-Modified/If-Modefied-Since:最后修改时间
Cookie
HTTP2 概述:更快,更简单,更稳定
- 帧(frame):HTTP2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流
- 消息:与逻辑请求或响应消息对应的完整的一系列帧。
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息。
- HTTP2连接都是永久的,而且仅需要每个来源一个连接
- 流控制:阻止发送方向接收方发送大量数据的机制。
- 服务器推送
HTTPS
- 经过TSL/SSL加密
- 对称加密:加密和解密都是使用同一个密钥
- 非对称加密:加密和解密需要使用两个不同的密钥,公钥和私钥
静态资源
- 静态资源方案:缓存+CDN+文件名hash
- CDN:内容分发网络,通过用户就近性和服务器负载的判断
跨域解决方案
-
CORS:跨域资源共享
- 预请求:获知服务端是否允许该跨源请求(复杂请求)
-
代理服务器:同源策略是浏览器的安全策略,不是HTTP的
-
Iframe:诸多不便、
鉴权
- Session+Cookie:登录成功后会发起一个请求,把当前的账户名密码等信息提交给server,server收到信息后处理验证正确性,如果是正确的,server会生成一个session并在本地存储起来,同时Server会在返回请求时把session借由set-Cookie放到相应的域名和地址下面,下一次访问时,浏览器自动携带Cookie的策略会将session携带到server,server经过比较解析可以判断出用户的身份
- JWT(JSON web Token):提交请求后server会生成一个token,server将token放置在response中返回给浏览器,浏览器再次访问时server会把token解析出来
\