这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
初识HTTP
基础知识:
- 超文本传输协议 Hyper Text Transfer Protocol
- 应用层协议,基于TCP协议
- 请求响应
- 简单可扩展
- 无状态(每个请求都是孤立的)
协议分析
1)方法
- Safe (安全的) : 不会修改服务器的数据的方法,如GET HEAD OPTIONS
- Idempotent (幂等) : 同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,如GET HEAD OPTIONS PUT DELETE
- 所有safe的方法都是Idempotent的
2)状态码
3)RESTful API : 一种API设计风格;
REST - Representational State Transfer
- 每一个URI代表一 种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过HTTP method,对服务器端资源进行操作,实现"表现层状态转化" 。
4)常用请求头
常用响应头
5)缓存
- 强缓存:本地有,直接用就行
- 协商缓存:无论本地有没有,一定要经历和服务器通信协商的过程
- max-age:有效时间
- must-revalidate:超过有效期,无论本地是否有,都不能使用
304没有更新,直接用;200有变化,响应缓存请求
6)cookie
HTTP/2(更快、更稳定和简单)
- 消息:与逻辑请求或响应消息对应的完整的一系列帧。(以帧为单位传送信息)
- 数据流:已建立的连接内的双向字节流可以承载一条或多条消息。
- HTTP/2连接都是永久的,而且仅需要每个来源一个连接
- 流控制:阻止发送方向接收方发送大量数据的机制(比如,看视频暂停了,之后可以使用流量控制,将流量转移一些给其他应用)
- 服务器推送(根据请求,猜测之后行为)
例如,stream1请求html文件,服务器发现该文件引用了.js和.css文件,于是预测之后也会请求,于是一起推送了
HTTPS
- HTTPS : Hypertext Transfer Protocol Secure
- 经过TSL/SSL加密
- 对称加密:加密和解密都是使用同一个密钥
- 非对称加密,加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)
场景分析
静态资源方案:缓存+CDN(确保快速拿到资源)+文件名hash(确保资源是最新的)
- CDN : Content Delivery Network
- 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
跨域访问:域名存在不同时(最后一个列子除外,没有端口号直接默认)
HTTP是无状态的,为什么网页还可以保持登录状态?
- 方案1:session+cookie,登陆后服务器将相应验证信息设置到cookie中
- 方案2:登陆后服务器返回一个token,之后再向服务器请求的时候,会携带token给服务器验证
跳转网页保持登录状态,eg单点登录: