Http请求中的keep-alive有了解嘛?
答案:
在http早期,每个http请求都要求打开一个tcp socket连接,并且使用一次之后就断开这个tcp连接了。而keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。使用keep-alive可以减少tcp连接的次数,减少了等待时长。但是tcp的长时间占用也会导致资源的占用。
当需要建立 HTTP 长连接时,HTTP 请求头将包含如下内容:
Connection: Keep-Alive
如果服务端同意建立长连接,HTTP 响应头也将包含如下内容:
Connection: Keep-Alive
当需要关闭连接时,HTTP 头中会包含如下内容:
Connection: Close
https://www.jianshu.com/p/49551bda6619
Http2的多路复用
在 HTTP/1 中,每次请求都会建立一次HTTP连接,也就是我们常说的3次握手4次挥手,这个过程在一次请求过程中占用了相当长的时间,即使开启了 Keep-Alive ,解决了多次连接的问题,但是依然有两个效率上的问题:
- 第一个:串行的文件传输。当请求a文件时,b文件只能等待,等待a连接到服务器、服务器处理文件、服务器返回文件,这三个步骤。我们假设这三步用时都是1秒,那么a文件用时为3秒,b文件传输完成用时为6秒,依此类推。(注:此项计算有一个前提条件,就是浏览器和服务器是单通道传输)
- 第二个:连接数过多。我们假设Apache设置了最大并发数为300,因为浏览器限制,浏览器发起的最大请求数为6,也就是服务器能承载的最高并发为50,当第51个人访问时,就需要等待前面某个请求处理完成。
HTTP/2的多路复用就是为了解决上述的两个性能问题。
在 HTTP/2 中,有两个非常重要的概念,分别是帧(frame)和流(stream)。
帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。
多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能
为什么HTTPS要比HTTP更安全
HTTP存在TLS/SSL协议层 HTTP= HTTP + TLS/SSL
HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
简单了解下:TLS/SSL主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密
https://juejin.im/post/5af557a3f265da0b9265a498
HTTP状态码了解一下
状态码 | 类别 | 描述 |
---|---|---|
1xx | Informational(信息性状态码) | 请求正在被处理 |
2xx | Success(成功状态码) | 请求处理成功 |
3xx | Redirection(重定向状态码) | 需要进行重定向 |
4xx | Client Error(客户端状态码) | 服务器无法处理请求 |
5xx | Server Error(服务端状态码) | 服务器处理请求时出错 |
常见应答状态码:
image.png401, 可能还存在未认证的情况
405: 请求头方法错误; 一般是将post请求做成get的请求方式
415:后台程序不支持提交的content-type
422 则表现为请求格式错误,但出现了 语义 错误
417: 预期结果失败
499: 这种情况,出现了请求服务器时间过长
UDT和TCP的区别
TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。
ajax 和 websocket的区别
- 本质不同:
ajax即是异步Javascript和xml,是一种创建交互式网页的网页开发技术
websocket: 是h5的一种新协议,是基于tcp连接进行的实时通信 - 生命周期不同:
websocket是一种长连接,在一个会话种一直存在。
ajax: 是一个短连接 - 适用范围
websocket使用前后端实时通信,而ajax则是非实时通信 - 发起人不同
ajax是客户端发起请求,websocket是客户端和服务端相互推送消息
5 用法
ajax:
$.ajax({
type:"post",
url:"http://localhost:8080/target",
data:"state = yes",
dataType:"json",
success:funciont(data){
}
});
websocket:
var monitor = new webSocket('''')
onOpen 、onMessage、onClose
说下你了解的HTTP缓存机制
-
浏览器的缓存,HTTP缓存有多种规则,那么我可以根据是否需要向服务端发起请求来分类,可以将其分为强制缓存,对比缓存
-
强制缓存 HTTP头部字段:cache-control, expires(这个字段很少用了,服务端的时间可能客户端时间不一致, 而expires代表的是服务端时间,可以考虑用 max-age
-
对比缓存通过对比HTTP的last-modifyed, etag字段,下一次请求服务器资源的时候可以发送if-modified-since与服务器的last-modiy对比来是否请求缓存。如果时间一直则继续使用缓存
网友评论