HTTP
HTTP是一个超文本传输协议
构成:请求报文&响应报文
请求报文
响应报文
HTTP首部字段
//判断一个请求是否结束Content-Length 或者 chunked
Content-Length :1024
chunked //最后会有一个空的chunked
//允许在同一个tcp连接上发送多个http请求,但服务器必须按照顺序应答
Connection: keep-alive
timeout=20 //最多维持20s
max=100 // 最多100次请求后断开
//
//http2后新增
使用二进制数据流,支持头部压缩
HTTP的请求方式有哪些?
GET POST HEAD PUT DELETE OPTIONS
GET和POST有什么区别?
GET和POST的区别?
GET用于获取资源:安全、幂等、可缓存
POST用于处理资源:非安全、非幂等、不可缓存
安全:不引起服务端的任何变化
幂等:同一个请求方法执行多次和执行一次的效果完全相同。
可缓存:代理服务器上可以缓存结果
状态码有哪些?
1xx : 服务器收到请求
2xx:操作被成功接收并处理
3xx:重定向
4xx:客户端错误
5xx:服务端错误
HTTP特点
无连接:建立连接后,又会释放连接 (HTTP持久连接)
无状态:多次请求,不知道是否同一个用户 (Cookie,Session)
HTTP建立连接的过程
Charles抓包原理
HTTPS
HTTPS是安全的HTTP,安全是在应用层之下、传输层之上插入了SSL/TLS中间插件。HTTPS = HTTP + SSL/TLS
HTTPS连接建立流程
HTTPS使用了哪些加密手段
连接过程中使用了非对称加密,非对称加密很耗时
后续通信过程使用了对称加密。
UDP
特点:
1 无连接
2 尽最大努力交付
3 面向报文(既不合并,也不拆分)
功能:
1 复用、分用
2 差错检测
TCP
特点
1 面向连接 : 三次握手,四次挥手
为什么是三次握手?
假设2次握手,client发送 syn = a 超时,此时超时重传 syn = b,Server回应了ack建立一次连接。 之后syn=a到达了Server,Server回应了ack。那么就会建立2次连接。但是三次就不一样。当超时的syn=a达到Server,Server回应ack后,客户端自己知道建立已经连接,就不会再建立新的连接了。
为什么是四次挥手?
客户端和服务端的连接通道是全双工的。需要双方面的连接和释放
2 可靠传输
无差错
不丢失
不重复
按序到达
3 面向字节流
4 流量控制
滑动窗口协议: App继续发送数据时,Server接收窗口比较小,发送方窗口大,以更快的速率往后发,需要由TCP窗口首部字段更改发送方的发送速率。
5 拥塞控制
慢开始,拥塞避免
快恢复,快重传。
x:交互次数,轮询次数
y: 窗口大小
报文次数,窗口门限制前指数增加,门限值后,线性增长。若果发了网络拥塞。重新慢开始,同时降低窗口
DNS
域名到IP地址映射,DNS解析请求采用UDP数据报,且明文
1 DNS解析查询方式
递归查询:我去给你问一下
迭代查询:我告诉你谁可能知道
DNS劫持与HTTP的关系是怎样的?
没有关系,DNS解析发生在HTTP建立连接之前,DNS解析请求使用UDP数据报,端口53
2 DNS解析转发?
就是本地DNS为了节省资源,把解析任务外包给其他的DNS服务器。
3 怎样解决DNS劫持?
httpDNS : DNS是使用UDP数据报,明文请求53端口。改为使用HTTP协议向DNS服务器的80端口进行请求。
长连接:Client <----->长连接Server-------->APIServer
Session/Cookie
Cookie主要用来记录用户状态,区分用户;状态保存在客户端。
客户端发送cookie在http请求报文的Cookie首部字段中
服务端设置http响应报文的Set-Cookie首部字段
怎样保证Cookie安全?
对Cookie加密处理
只在https携带Cookie
设置Cookie为httpOnly,防止跨站脚本攻击
Session
Session主要用来记录用户状态,区分用户;状态存放在服务器端。
Session需要依赖Cookie实现。
总结
http GET POST区别?
HTTPS链接建立流程?
TCP UDP区别?
TCP慢开始?
客户端怎样避免DNS劫持?