浏览器执行过程
- 1浏览器首先通过http 或 https协议向服务端发送请求;
- 2把请求回来的html解析,构建dom;
- 3计算dom树的css属性;
- 4根据css属性对元素进行渲染,得到内存中位图;
- 5位图合成,并绘制页面;
http => 构建DOM树 => css计算 => 渲染,合成位图 => 绘制网页 http请求之后就会产生流式的数据,我们不需要等上一步完全结束,所以我们看到的网站是逐渐出现的。
首先浏览器通过url把数据返回,返回数据使用的是http协议。
Http协议
http协议是基于tcp协议(tcp双向通信)的,http协议是在tcp基础上增加了request和response模式,这就决定了http请求要在浏览器端发起。
http是使用tcp协议传输文本格式的 一个应用层协议。
http.request.method
- GET
- POST
— PUT
- DELETE
--HEAD 和GET很像,但是只返回请求头
- CONNECT 用于HTTPS 和 WebSocket
- OPTIONS
- TRACE
http.response.status
- 1xx:临时回应 一般看不到,http库直接处理了
- 2xx:请求成功
- 3xx:请求的 目标有变化希望客户端进一步处理。
301 和 302 永久或者临时性跳转
304 客户端缓存未更新
- 4xx:客户端请求错误
403客户端无权访问
404找不到页面
- 5xx: 服务端报错
http.request.body
- application/json
- application/x-www-form-urlencoded
- multipart/form-data
- text/xml
http与https协议的区别
http和https基本的模式都是request-response模式。
https的优势
1确定了目标服务的身份。
2保证超文本传输过程中安全性,https在文件传输过程中是加密传输的。
因为https在进行传输时候会在tcp协议上构建一条TLS加密通道。
http1.1 VS http2.0
http2.0改进的地方:
1 服务端推送。当url请求后台时,服务端可以推送一部分内容放到客户端,存在客户端缓存中,可以避免并发,进行性能优化。
2 tcp连接复用。同一个tcp连接传输多个http请求,可以避免tcp连接建立时三次握手。
3 可以2进制代理文本传输,可以极高的提高传输的效率。
在 HTTP/1 中,为了性能考虑,我们会引入雪碧图、将小图内联、使用多个域名等等的方式。这一切都是因为浏览器限制了同一个域名下的请求数量(Chrome 下一般是限制六个连接),当页面中需要请求很多资源的时候,队头阻塞(Head of line blocking)会导致在达到最大请求数量时,剩余的资源需要等待其他资源请求完成后才能发起请求。
在 HTTP/2 中引入了多路复用的技术,这个技术可以只通过一个 TCP 连接就可以传输所有的请求数据。可以避免队头阻塞。
多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。
TCP和UDP对比
UDP:相当于发信息,不需要对方同意就可以发,也不知道对方看了短信没有。
TCP:相当于打电话,需要对方同意了接听电话,可靠,知道对方接了电话
TCP(传输控制协议)
TCP协议提供的是一种可靠的 1对1的 通过三次握手四次回挥手的协议。
UDP(用户数据报协议)
只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。
UDP协议提供的则是不保证可靠 无连接的传输协议。
UDP传输协议快 不需要建立联系 想发就发 但是不可靠 ;
支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。
TCP:双向一对一通信;可靠但是需要三次握手
-
第一次握手 客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。
-
第二次握手 服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态。
-
第三次握手 当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。
四次挥手