网络
HTTP请求方式
GET和POST方式的区别?
- 从语义的角度来回答(RFC官方文档)
GET:获取资源,安全的,幂等的,可缓存的
POST:处理资源,非安全的,非幂等的,不可缓存的
安全性:不应该引起server端的任何状态变化。,常见的安全性的方式:GET, HEAD, OPTIONS;
幂等性:同一个请求方法执行多次和执行一次的效果完全相同
可缓存性:请求是否可以被缓存(GET, HEAD)
状态码
你都了解哪些状态码,他们的含义是什么?

连接建立流程

HTTP的特点
-
无连接
HTTP的持久连接
-
无状态
Cookie/Session
持久连接

提升了网络响应效率
头部字段

怎样判断一个请求是否结束的?
- Content-length: 1024
接收数据的字节数有没有到达
Content-length
长度的字节数。
-
Chuncked
最后会有一个空的chunked。
Charles抓包原理是怎样的?
利用HTTP的中间人共计漏洞实现的。

中间人作为一个代理服务器,去和客户端与服务端进行双向通信。
HTTPS与网络安全
HTTPS与HTTP有怎样的区别?
HTTPS = HTTP + SSL/TLS
HTTPS是安全的HTTP,他的安全是由SSL/TLS这样一个插在应用层之下,传输层之上这样的一个协议来保障的。
HTTPS连接建立流程是怎样的?

会话秘钥 = random S + random C + 预主秘钥;
HTTPS都使用了哪些加密手段?为什么?
- 连接建立过程使用非对称加密,非对称加密很耗时
非对称加密

对称加密

TCP与UDP
传输层层协议:
- TCP,传输控制协议
- UDP,用户数据报协议
UDP
特点:
-
无连接
-
尽最大努力交互
-
面向报文
既不合并,也不拆分

功能:
- 复用
- 分用
- 差错检测
复用分用

差错检测

TCP
特点
-
面向连接
数据传输开始之前,需要建立连接 - 三次握手;数据传输结束之后,需要释放连接 - 四次挥手;
为什么连接建立需要三次握手,而不是两次握手?
防止失效的连接请求报文段被服务端接收,从而产生错误。PS:失效的连接请求:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』。
若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。TCP
-
可靠传输
-
无差错
-
不丢失
-
不重复
-
按序到达
-
-
面向字节流
-
流量控制
-
拥塞控制
可靠传输
无差错

超时重传

确认丢失

确认迟到

面向字节流

流量控制
滑动窗口协议

拥塞控制
- 慢开始,拥塞避免
- 快恢复,快重传

DNS
了解DNS解析吗?
域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文
DNS解析查询方式
- 递归查询
- 迭代查询
递归查询

迭代查询
"我告诉你谁可能知道"

DNS解析存在哪些常见的问题?
- DNS劫持问题
- DNS解析转发问题
DNS劫持问题

怎样解决DNS劫持?
-
使用httpDNS
一般,DNS解析是使用DNS协议向DNS服务器的53端口进行请求,这里使用HTTP协议向DNS服务器的80端口进行请求。

- 长连接

DNS劫持与HTTP的关系是怎样的?
没有关系,DNS解析发生在HTTP建立连接之前,DNS解析请求使用UDP数据报,端口号53;
DNS解析转发问题

Session与Cookie
HTTP协议无状态特点的补偿。
Cookie
Cookie主要用来记录用户状态,区分用户;状态保存在客户端。

客户端发送的cookie在http请求报文的Cookie首部字段中;
服务器端设置HTTP响应报文的Set-Cookie首部字段;
怎样修改Cookie?
-
新cookie覆盖旧cookie
覆盖规则:name,path,domain等需要与原cookie一致。
怎样删除Cookie
-
新cookie覆盖旧cookie
覆盖规则:name,path,domain等需要与原cookie一致,设置cookie的expires=过去的一个时间点,或者maxAge= 0;
怎样保证Cookie的安全?
- 对Cookie进行加密处理
- 只在https上携带Cookie
- 设置cookie为httpOnly,防止跨站脚本攻击
Session
Session也是用来记录用户状态,区分用户的;状态存放在服务器端。
Session和Cookie的关系是怎样的?
-
Session需要依赖于Cookie机制
session工作流程

总结
HTTP中的GET和POST方式有什么区别?
HTTPS连接建立流程是怎样的?
TCP和UDP有什么区别?
请简述TCP的慢开始过程?
客户端怎样避免DNS劫持?