HTTP系列-01
什么是http?
一种属于应用层的通讯协议。
http各版本
- http0.9 只有get方法只能传个html回来什么状态码都没有,只有短连接
- http1.0 加入请求头和响应头,增加head post方法,缓存expires,重定向等,默认短连接
- http1.1 现在用的最多的就是这个 新增 option delete put方法,默认长连接,持久连接,管道机制,自定义请求头,新增digest认证 cache-control等 缺点:http1有缺陷连接无法复用,对头阻塞,协议开销过大,安全因素。
- http2 新增实现高性能传输高吞吐 缺点(都是因为底层tcp的原因)
- http3 基于udp 总之http的升级都是为了更好
http传输过程
首先理解为什么三次握手?
最终目的就是为了确认双方的收发能力。
第三次为了服务端确定客户端接受能力OK。
- 第一次握手
客户端发送SYN报文,进入SYN_SEND状态 - 第二次握手
服务端收到SYN报文,发送SYN+ACK报文,进入SYN_RECEIVED状态 - 第三次握手(本阶段可以带数据)
客户端收到SYN+ACK报文,客户端发送ACK确认报文给服务端进入ESTABLISHED状态,完成三次握手。
DNS解析过程
DNS解析(先本地host找,没有就去本地dns服务器,(如果设置了转发模式)没有则去上一层dns服务器找一直到dns根服务器)>IP>web服务器
DNS和CND区别
DNS之上挂载CND
CND进行内容分发就近的服务器
HTTP事务处理过程
url回车》dns返回ip》http请求》tcp连接》开始http》服务器》生成http回复》tcp》传输http内容》释放tcp》网页接收解析。
HTTP系列-02
HTTP协议特点
1简单快速2灵活3无连接(响应完就断开)4无状态
URL与URI的区别与联系
URI包含URL(类似地址)和URN(类似人名),URI表示一个资源,URL提供访问机制。
HTTP报文(请求)结构
HTTP报文(响应)结构
HTTP请求方法
- get-传参显示-有缓存-长度限制(ie2803-谷歌8182-火狐65536)
- post-带请求体
- put-(put是幂等的post不是)
- head-主要用于测试超链接能不能用
- delete-和put一样没有验证机制有安全问题基本不用
- option-查询服务器支持什么方法
- trace-用于测试(有安全问题不用)
- connect-用于代理
HTTP响应状态码
- 200成功-201创建成功-202未处理-206部分处理
- 301永久-302临时-304资源未更新
- 400请求错误-401未授权-403禁止访问-404未找到-405不准许方法-406Not Acceptable
- 500-服务器错误-502网关错误-503服务器宕机
Cookie与Session
主要弥补http无状态的缺点。
由服务器派发cockie存客户端,session存服务端。
cookie工作原理
session工作原理
coockie和session的有效时间
coockie可以做到永久
session是存在服务器的所以一般都设置超时间,超过了这个时间没访问就删除,第二种可以主动删除
coockie和session对比
HTTP系列-03
url的解码编码
url采用ASCII编码,非ASCII字符集会进行编码》 %xxx
HTTP协议之基本认证
basic基本认证
digest 摘要认证 ( http1.1开始)
SLL认证
FromBase表单认证
HTTP中长连接与短连接
长连接指的是tcp的长连接,不是http
长连接缺点:长连接使用频繁请求的客户,但客户很多的话服务器也扛不住,可以设置一些长时间没反应断开,或设置每个客户端最大连接数。
HTTP中介之网关和代理区别
代理连接的是相同协议的
网关可以连接多个不同协议的实现。
HTTP缓存
缓存的好处,服务器不用浪费资源查找返回客户端不用重新请求。
- cache-control字段
no-story全部内容不缓存
no-cache缓存,但浏览器使用缓存前会请求服务器该资源是否最新
max-age 设置多少秒前不发请求
s-maxage 代理的缓存
public cdn缓存
private 只有客户端缓存
如果响应头里也有expires并且和max-age共存的情况,max-age优先级最高。 - last-modified(秒级)和etag(更精确)
etag优先级高于modified - 其他缓存方案-cdn缓存
对于cdn也和http缓存一样,如果没过期就不请求服务器,如果过期了就先请求服务器拿到最新的 然后再给客户端。
不同刷新对缓存的影响
HTTP内容协商机制
就是客户端和服务器协商返回什么内容最符合。
HTTP的断点续传与多线程下载
通过header中range和content-range实现。
续传成功返回206,如果有变动返回200和新文件内容。
HTTP系列-05 4跳过
HTTP与HTTPS
HTTPS相当于 http+tsl 》ssl又在http和tcp之间。
HTTPS功能
1加密(内容加密)2保障访问的是真网站(身份认证)3防止数据修改(数据完整性)
https原理 - 内容加密
非对称和对称 - 身份认证
数字认证(CA证书)
HTTPS使用成本
证书费-https降低访问速度(因为多了一层)-加解耗时(浏览器解析签名 ,秘钥交换应用层加解密几十毫秒耗时,服务器也一样)
HTTPS握手过程
HTTP系列-06
HTTP缺点
- 一条连接只发一个请求
- 只能客户端请求
- 请求和响应头不压缩
- 每次发送的头部信息多
- 非强制压缩发送
WebScocket
WebScocket是基于http的协议,可以理解为给http打的加强补丁。
即使使用长轮询还是无法解决客户端无法接受服务器发来的信息。
SPDY
SPDY其实就是http2的前身
1.多路复用2.服务器推送3.压缩头4.强制使用ssl
也解决了雪碧图这种问题。
HTTP2.0
http2特性
http的性能增强核心》二进制分帧,也就是直接把head啥的报文头报文体转成二进制这种
- 首部压缩
- 多路复用(有点:减少连接提高并发,缺点:丢包情况还得重新传)
- 并行双向字节流
- 请求优先级(例如首屏最急的jscss,但这个时候还在传图片)
- 服务器推送
http2的问题
- 主要还是底层支持的tcp造成的。
- 例如http2中的多路复用,如果丢包的话又要重新tcp等待重传(阻塞),但http1中是多个请求所以不会阻塞后面的请求。
- tcp和tsl的握手延迟。
HTTP系列-07
SQL注入攻击
原理:通过用户输入的信息注入sql语句
解决:参数化参数,就是处理用户输入的信息。
跨站脚本攻击(XSS)-跨站脚本
原理:浏览器中执行恶意脚本,(例如我发布文章里插入js语句)
解决:输入验证,不信任用户输入的内容即可,对内容转码或者过滤。
CSRF攻击-跨站请求伪造
原理:通过已经认证完成的用户点击链接跳转(跳转的时候用户的cookie啥的也带过去了)转账之类-核心原因就是利用cookie。
解决:1.增加确认操作,这样可以告知用户正在进行的操作 2.重新认证,操作敏感操作重新输入密码3.使用token4.利用Cookie的SameSite
4
5
6