-
http
- 超文本传输协议
-
http的请求方式?
- get、post、head、put、delete、options
-
get和post方式的区别
- get请求参数长度限制2048个字符,post一般没有限制
- get请求参数拼接到url后面,post请求参数在body里面
- get请求不安全,post请求比较安全
- get主要用于获取数据,是安全的、幂等的、可缓存的,post用来处理资源,是非安全的、非幂等的、补课缓存的。
- 安全性:不应该引起server端的任何状态变化;
- 幂等性:同一个请求方法执行多次和执行一次的效果完全相同;
- 可缓存:请求是否可以被缓存
-
状态码
- 200 OK:请求成功,信息在返回的响应报文中
- 301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文中的Location:首部行中。客户软件将自动获取新的URL
- 400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解
- 404 Not Found:被请求的文件不在服务器上
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
<4开头的状态码通常是客户端的问题,5开头的则通常是服务端的问题>
-
请求建立连接流程
- tcp连接三次握手
- Client发送SYN同步连接报文请求连接
- Server返回叫ACK的tcp同步报文允许连接
- Client回复ACK连接报文并建立连接
- http数据传递
- Client端http发送请求报文
- Server端http回复相应报文
- tcp四次挥手释放连接
- Client发送终止报文FIN
- Server回复ACK确认报文,该步骤Client到Server的连接已经断开
- Server向客户端发送FIN,ACK断开报文
- Client回复Server端ACK确认报文,该步骤Server到Client的连接断开
- tcp连接三次握手
面试题:
-
http特点
- 无连接,即http的连接有建立连接和释放连接
- 无状态,同一用户多次发送同一个请求的时候对Server不知道是同一个用户;
-
http的持久连接
- 正常请求每发送一条数据时会断开连接,再次发送请求会建立新的通道;
- 持久连接当连接建立后会持续一段时间后再释放,期间的多个请求会通过该通道进行完成数据传递
- 持久连涉及到http的头部字段
- Connectin:keep-alive (客户端期许持久连接)
- time:20 (连接持续时间)
- max:10 (该连接最多可发送多少个http请求和相应对)
- 持久连涉及到http的头部字段
-
怎么判断一个请求是否结束?
- 在请求报文和相应报文都相应字段,而响应报文头部有content-lengh字段来标记数据大小,可通过所接收数据是否达到改大小来判断请求是否结束
- Server端返回的数据中每个报文头部字段都包含一个chunked,而最后一个报文chunked和内容均为空,表示该数据接收完毕.
-
Charles抓包原理
- 利用http中间人攻击来实现的,当Client端发送网络请求时中间人进行hook,然后中间人假冒Client端向Server端进行网络请求,然后将请求得到的数据返回给Client端;在这个过程中中间人可以修改客户端的请求参数以及Server端返回的数据
https与网络安全相关问题
- https和http的区别
- https是http和SSL/TLS组成的,也就是https比http多了一个安全方面的模块
- 如果通过网络传输分层可以将http划分为应用层,TCP为传输层,SSL/TLS实际为应用层和传输层之间的一个夹层,以保证数据的安全传输
- https连接建立的流程(https是怎么保证数据的安全传输的)
- Client端发送TLS版本号、支持的加密算法、随机数C
- Server接收到数据后向Client端返回商定的加密算法、随机数S、server证书
- Client端收到server证书后对比数据比较验证证书的真实性
- 组装会话秘钥,通过随机数C、随机数S和客户端产生的预主密钥来进行会话秘钥的组装
- Client端通过server的公钥对预主密钥进行加密传输
- Server通过私钥解密得到预主密钥
- Server通过随机数C、随机数S以及得到的预主密钥进行会话秘钥的组装
- Client发送加密的握手消息,Server收到后返回相应的加密握手消息来验证通道是否安全建立
- 注
- 会话秘钥=随机数C+随机数S+预主密钥 通过一定的算法组合起来的一个密钥(对称加密的结果)
- 连接建立过程使用非对称加密,该加密方式比较耗时
- 后续通讯使用对称加密,相对比较节省资源
TCP&UDP
-
UDP:用户数据报协议
- 特点
- 无连接:不需要建立连接也不需要释放连接
- 尽最大能力交付,不保证安全交付
- 面向报文,既不合并,也不拆分,不管应用层传输来数据的大小,都原封不动的进行传输
- 功能
- 复用分用
- 复用:多端口复用,即多个端口中无论哪个端口需要传输数据都可以复用同一个传输层,然后再通过IP层传输
- 分用:通过IP层接收的数据可以通过UPD层可以拆分为多个数据报,每个数据报都有原端口和目的端口标识,然后根据目的端口进行数据的分发
- 差错检测
- 复用分用
- 特点
-
TCP:传输控制协议
- 特点
- 面向连接,数据开始传输前需要建立连接,数据传输完成断开连接
- 可靠传输,保证传输的数据无差错、无重复、按序到达
- 超时重传,当客户端长时间收不到回复的报文会重传以保证分组报文不丢失和差错校验
- 确认丢失,当服务端两次收到同一段报文的请求时会抛弃第一次收到的请求并相应第二次的请求以保证数据的正常传输
- 确认迟到,类似于确认丢失,但对于迟到的报文会直接丢弃
- 面向字节流,当发送方进行输出传输时,在TCP层面发送端和接收端都会有一个数据的缓冲,在TCP数据传输的过程中可能会将发送方发送的消息合并发送,每次发送几个字节是由TCP来决定的
- 流量控制,是基于滑动窗口协议来实现的,数据接收时
- 拥塞控制
- 特点
-
为什么需要三次握手?
- 为了防止连接超时产生的多条连接,当第一次握手或第二次握手的请求因超时被Client抛弃时将不会发起第三次握手,Server长时间收不到第三次握手请求将默认Client不进行此连接
-
四次挥手由于http是全双工连接,所以断开也是双向的,当单向断开时未断开的一个可能会继续发送数据,直到完全断开