HTTP协议
1、请求/响应报文
a、请求报文
- 请求行
- 首部字段区
- 请求实体主体
get
请求一般不带实体主体,post
请求一般带实体主体。
b、响应报文
- 响应行
- 首部字段区
- 响应实体主体
c、HTTP的请求方式都有哪些?
d、GET和POST的区别?
get
请求参数以?
分隔拼接到URL
后面,post
请求参数在Body
内部。get
参数长度显示2048
个字符,post
一般没有该限制。get
请求不安全,post
请求比较安全。安全性
表示不应该引起server
端的任何状态变化。幂等性
表示同一个请求方法执行多次和执行一次的效果完全相同。可缓存性
表示请求是否可以被缓存。
e、你都了解哪些状态码?
2、连接建立流程
3、HTTP的特点
- 无连接
HTTP
持久连接方案可解决该问题
- 无状态
Cookie/Session
4、持久连接
a、开启持久连接需要设置的头部字段
Connection: keep-alive
需要开启持久连接time: 20
持续时间max: 10
持久连接最多可发起的网络请求次数
b、怎样判断一个请求是否结束?
Content-length: 1024
根据所接受数据是否达到Content-length
来判断。chunked
post请求会有多次返回,最后一次返回会有一个空的chunked
。
5、Charles抓包原理是怎样的?
- 是利用HTTP
中间人攻击
漏洞来实现的。 - 中间人可以
篡改
发送和接收的数据。
HTTPS与网络安全
1、HTTP和HTTPS有什么区别?
HTTPS
就是在HTTP
的基础之上,在应用层
和传输层
之间增加了SSL/TLS
,为我们实现网络安全机制。HTTPS
是安全的HTTP
。
2、HTTPS链接建立流程是怎样的?
- 客户端向服务器发送一段报文,报文内容包括
三
部分,客户端支持的TLS协议版本
,客户端支持的加密算法
,一段随机数C
。 - 服务器返回客户端一段握手的报文消息,内容也包括
三
部分,服务器从客户端上报的多种加密算法中选择的加密算法
,一段随机数S
,服务器证书
。 - 客户端对服务器返回的
证书
进行验证
,判断服务器是否是合法的服务器,即对服务器公钥
进行验证。 - 客户端通过
预主密钥
、一段随机数C
、一段随机数S
,组装会话密钥
。 - 客户端通过服务器的
公钥
对预主密钥
进行加密传输。 - 服务器通过
私钥
解密得到预主密钥
。 - 服务器通过
预主密钥
、一段随机数C
、一段随机数S
,组装会话密钥
。 - 客户端和服务器相互发送
加密的握手消息
,验证握手是否完成。
a、会话秘钥
3、HTTPS都使用了哪些加密手段?为什么?
- 连接建立过程使用
非对称加密
,非对称加密很耗时
。 - 后续通信过程使用
对称加密
。
a、非对称加密
b、对称加密
- 对称加密秘钥如果遗失,可能会造成
中间人攻击
。
TCP/UDP
1、UDP(用户数据报协议)
- 特点
- 无连接
- 尽最大努力交付
- 面向报文
- 即不合并、也不拆分
- 功能
- 复用
- 分用
- 差错检测
2、TCP(传输控制协议)
- 特点
- 面向连接
- 可靠传输
- 停止等待协议
- 无差错情况(无差错)
- 超时重传(不丢失)
- 确认丢失(不重复)
- 确认迟到(按序到达)
- 停止等待协议
- 面向字节流
- 流量控制
- 滑动窗口协议
- 接收方有接收缓存,如果发送速度过快,可能造成
溢出
。 - 接收方可以动态调整发送方的
发送窗口
,达到动态调整发送速率的目的。 发送窗口
和接收窗口
是两个字段,位于TCP
报文的首部。
- 拥塞控制
- 慢开始、拥塞避免
- 快恢复、快重传
a、为什么要进行三次握手而不是两次?
- 是为了解决超时场景。
- 如果第一个
1.SYN
超时,客户端
会重新发送一次1.SYN
。 服务器
在收到第二次SYN
后,会发送确认信息,建立连接。- 如果没有第三次握手,那么第一个超时
1.SYN
可能会再次发送给服务器
,服务器
会认为客户端
想再次建立一个新的链接。 - 如果有第三次握手,那么第一个超时
1.SYN
会接收到服务器
的2.SYN
,但是不会再发送1.ACK
给服务器
,就不会再建立一个新的链接。
- 断开连接时,需要分别断开
客户端
到服务器
,服务器
到客户端
的链接。 客户端
发送6.FIN
,服务器
接收后返回7.ACK
,即断开客户端
到服务器
的链接。- 此时处于
半关闭状态
,如果服务器
还有未发送完的信息,可以继续从服务器
向客户端
发送信息。 服务器
向客户端
发送8.FIN,ACK
,客户端发送9.ACK
,即断开服务器
到客户端
的链接。
DNS解析
1、了解DNS解析吗?
- 域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文。
- DNS解析查询方式
- 递归查询
- 迭代查询
2、DNS解析存在哪些常见的问题?
-
DNS劫持问题
-
DNS解析转发问题
- 可能造成跨网访问,效率降低。
a、DNS劫持与HTTP的关系是怎样的?
没有关系
DNS
解析发生在HTTP
建立连接之前DNS
解析请求使用UDP
数据报,端口号53
b、怎么解决DNS劫持?
- httpDNS
- 使用
HTTP
协议向DNS
服务器的80
端口进行请求
- 使用
- 长连接
Session/Cookie
HTTP
协议无状态特点的补偿
1、Cookie
Cookie
主要用来记录用户状态,区分用户;状态保存在客户端
。客户端
发送的cookie
在http
请求报文的Cookie
首部字段中。服务器
端设置http
响应报文的Set-Cookie
首部字段。
a、怎样修改Cookie?
- 新
cookie
覆盖旧cookie
。 - 覆盖规则:
name、path、domain
等需要与原cookie
一致。
b、怎样删除Cookie?
- 新
cookie
覆盖旧cookie
。 - 覆盖规则:
name、path、domain
等需要与原cookie
一致。 - 设置
cookie
的expires=过去的一个时间点
,或者maxAge=0
。
c、怎样保证Cookie的安全?
- 对
Cookie
进行加密处理。 - 只在
https
上携带Cookie
。 - 设置
Cookie
为httpOnly
,防止跨站脚本攻击。
2、Session
Session
也是用来记录用户状态,区分用户的;状态存放在服务器端
。Seesion
需要依赖于Cookie
机制实现。
网络相关面试总结
HTTP
中的GET
和POST
方式有什么区别?HTTPS
链接建立流程是怎样的?TCP
和UDP
有什么区别?- 请简述
TCP
的慢开始过程 客户端
怎样避免DNS
劫持?