HTTP实用指南 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第7天
初识HTTP
从输入链接到显示页面发生了
-
识别链接,时搜索内容还是链接
- 如果是搜索内容,则拼接链接,打开指定的搜索引擎开始跳转
- 如果是链接,识别并拼接成完整的链接开始跳转(加上http/https协议前缀)
-
浏览器内核发起请求,到达服务器处理请求并返回数据
-
浏览器收到相应根据响应头判断是否需要重定向
- 需要则重新拼接链接重新跳转
- 获取到正确的响应后获取到文档,告知渲染进程准备开始渲染,渲染进程完成准备后告知主进程,渲染进程与网络进程搭建管道获取文档并开始渲染,(以上就是所谓的白屏时间)
- 加载页面完成
HTTP
- Hyper Text Transfer Protocol(超文本传输协议)
- 应用层协议,基于TCP协议
- 请求 响应
- 简单可扩展
- 无状态
协议分析
发展历程
HTTP0.9
- 只需要传输超文本,请求只有GET,相应只有HTML文档
HTTP1.0
- 增加header
- 状态码
- 支持多文档类型
HTTP1.1
- keep-alive,链接复用
- 缓存
- 内容协商
HTTP2
- 多路复用
- 压缩header
- 服务器推送
HTTP3(草案)
- udp
报文
请求头
响应头
Method
- Options:允许服务器针对特定资源所支持的HTML请求方法,或web服务器发送测试服务器功能.允许客户端查看服务器性能.
- Get:向特定资源发送请求并返回实体主体;
- Post:提交数据
- Put:上传最新数据
- Head:与get请求类似,但是不会返回响应主体,用于获取报头信息
- Delete:请求服务器删除页面
- Trace:回显服务器收到的请求,用于测试和诊断
- Connect:HTTP1.1协议中能够将连接改为管道方式的代理服务器。
- Patch:用于对资源应用部分修改
状态码
-
1XX:指示信息
-
2XX:成功接受、理解、接受
- 200:OK
-
3XX:重定向
- 301:资源永久转移
- 302:资源临时转移
-
4XX:客户端错误
- 401:未授权
- 404:不存在,可能是错误的URL
-
5XX:服务端错误
- 500:服务器内部不可描述错误
- 504:网关或代理无法再规定时间内获得想要的响应
RESTful API
是一种API设计风格,要和响应头中的Method和状态码区分开
常用请求头
- Accept:接受类型
- Content-type:实体内容类型
- Cache-Control:指定缓存机制
- if-Modified-Since:对应服务端的Last-Modified,判断缓存是否过期
- Expired:缓存控制
- Max-age:缓存时间
- if-None-Match:对应服务端ETag,匹配文件是否改动
- Cookie:同域访问携带
- Referer:页面来源URL
- Origin:最初请求来源,更尊重隐私
- User-Agent:客户端必要信息
常用响应头
- Content-type:实体内容类型
- Cache-Control:指定缓存机制
- Last-Modified:对应服务端的if-Modified-Since,判断缓存是否过期
- Expired:缓存控制
- Max-age:缓存时间
- ETag:对应服务端if-None-Match,匹配文件是否改动
- Set-Cookie:设置页面关联Cookie,服务器通过cookie传给客户端
- Server:服务器相关信息
- Access-Control-Allow-Origin:服务端允许的请求Origin头部
缓存机制
- 强缓存
- 协商缓存
Cookie
- key-value
发展
HTTP2
- 数据帧
- 消息
- 数据流
- 多路复用,长连接
- 流控制
- 服务器推送
HTTPS
- TSL/SSL
- 非对称加密+对称加密
场景分析
跨域
-
预请求:获知服务端是否允许该请求
-
相关协议头
-
解决方案
- CORS
- 代理服务器
- Iframe(诸多不便)
鉴权方案
- session+cookie
- JWT
单点登录(SSO)
实战
浏览器篇
- XHR
- Fetch
node篇
- 标准库:HTTP/HTTPS
- axios
用户体验
- 网络优化
- 稳定性
- 安全
扩展
通信方式
- WebSocket
- QUIC(HTTP3)
总结
本篇是对HTTP一些基础知识的总结,虽说是基础知识但覆盖的知识面也比较全面了,但是因为比较基础,还有很多延伸的知识点,比如浏览器各个进程的工作方式和原理等知识还需要进一步学习