一、Http常见知识点
1、Http特点
应用层协议
特点:(1)、支持客户/服务器模式
(2)、简单快速
客户向服务器请求服务时候,只需传送请求方法和路径;
常用方法有GET,POST,HEAD等
(3)、灵活
允许传送不同类型数据,Content-Type标记
(4)、无连接
每次连接只能处理一个请求,服务器处理完请求后立马释放TCP连接,
(5)、无状态
对于事务处理没有记忆能力,同一用户再次访问服务器时候,响应页面与第一次相同
2、HTTP的GET和POST区别
(1)get一般用于请求;post一般用于上传资源。
(2)get请求参数在路径中,不安全;post参数在请求体里面,安全。
(3)get请求参数有长度限制,如果把长内容放在url中,服务器可能读不到的;
post请求对参数没有要求。
(4)get产生一个TCP数据包,浏览器把http header和data一并发送出去,响应200;
post浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200。
(5)get在浏览器回退时候是无害的,而post会再次提交请求。
(6)参数数据类型,get只接受ASCLL字符,而post没有限制。
(7)get请求参数记录会保存在历史记录里面,post中的参数不会被保留。
3、HTTP和HTTPS区别
(1)HTTP为明文传输,数据都是未加密的,安全性差,HTTPS(SSL+HTTP)数据传输过程是加密的,安全性好。
(2)使用HTTPS协议需要申请证书。
(3)HTTP页面响应速度比HTTPS快。因为HTTP使用TCP三次握手建立连接,客户端与服务器之间交换3个包,而HTTPS还要加上SSL握手需要9个包一共12个包。
(4)http:端口80;https:端口443。
(5)HTTPS建构在SSL/TLS上的HTTP协议,更耗费服务器资源。
4、Https加密过程
采用对称加密和非对称加密结合的方式来保护浏览器和服务端之间的通信安全。
大概步骤:
(1)客户端请求网址
(2)服务端返回证书公钥
(3)客户端验证公钥的有效性,有效时,生成一个加密随机值,将加密后的密钥发送给服务端
(4)服务端用私钥解密,用密钥加密要发送的内容,发送给客户端
(5)客户端用密钥解密信息。
5、TCP与UDP区别
(1)TCP:面向连接:发送数据之前需要建立连接
UDP:面向无连接:发送数据之前不需要建立连接
(2)TCP:面向字节流;UDP:面向数据报
(3)TCP:保证数据准确性;UDP:可能丢包,一次向IP层交付一个报文。
(4)TCP:保证数据顺序;UDP:不保证
6、TCP三次握手,四次挥手
(1)三次握手
SYN:初始化建立连接
ACK:帮助确认收到的SYN消息
SYN-ACK:本地的SYN消息和ACK消息,返回确认
为什么不是两次?
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认
(2)四次挥手
一次,客户端想终止,发送FIN,
二次,服务器返回ACK消息,客户端进入二次等待,
三次,服务器返回FIN进行关闭,
四次,客户端就会由 FIN_WAIT_2 状态变为 TIME_WAIT 状态。处于 TIME_WAIT 状态的客户端允许重新发送 ACK 到服务器为了防止信息丢失。
7、TCP为什么是可靠传输(计算机网络书p213-216)
超时重传,分组确认,
(1)通过 TCP 连接传输的数据无差错,不丢失,不重复,且按顺序到达。
(2)TCP 报文头里面的序号能使 TCP 的数据按序到达。
(3)报文头里面的确认序号能保证不丢包,累计确认及超时重传机制。
(4)TCP 拥有流量控制及拥塞控制的机制。
自己解释:
收到第一个分组确认之前可能会出现差错,经过一段时间没有收到确认,这个时间是通过每发送一个分组就设置一个超时计时器,超过就重传,没超过就撤销计时器。在发送完一个分组后,需保存副本,收到确认时消除。其次分组发送和确认分组都需编号,才能无差错。
重传时候收到之前发送的和现在发送的会丢掉重复的,重传确认。
TCP通过连续ARQ协议的发送窗口在收到一个分组的确认后才将发送窗口往前移一位,进行下一个传输。
8、HTTP2.0新特性
(1)增加二进制分帧,headers帧,data帧
(2)压缩头部,相同请求头部进行缓存
(3)多路复用,任意数量双向数据流
(4)请求优先级
(5)服务器提示
9、输入url后的过程
(1)域名解析
(2)TCP建立连接
(3)http发送请求
(4)服务器响应数据
二、持续更新中…
如有错误,欢迎指正!!!