TCP/IP:如何把页面页面完整的发送到浏览器上
描述:浏览器从服务器获取页面数据,需要保证数据的完整性。那么怎么建立连接和传输呢。
- IP协议负责寻址,在IP头中,包含了主机A和主机B的地址
- TCP协议负责建立连接,连接包括三次握手建立连接、传输数据和四次挥手断开连接
- 数据包有两种,一种是UDP一种是TCP,UDP不需要建立长连接,所以效率高。但是容易出错
- TCP的数据包,内部包含了序号,便于接收端重组。需要发送的数据量比较大,但是能够保证数据传输的可靠性
HTTP请求的流程
描述:浏览器发起HTTP请求过程中,经历的所有环节。浏览器的缓存和cookie等
问题:
-
HTTP和TCP是什么样的关系?
-
浏览器怎么发送请求的?
-
服务器怎么响应HTTP请求?
-
HTTP中有哪些缓存?
-
登录态是怎么保存的?
-
HTTP和TCP是什么样的关系?
TCP是传输层,HTTP是应用层。 HTTP是依赖于TCP的数据传输阶段来传递数据的
- 浏览器怎么发送请求的?
首先要通过url来寻找IP地址,通过DNS解析出IP地址。 请求过的URL在本地会有DNS缓存。有了IP地址以后建立TCP连接。 然后开始发送HTTP请求:请求行、请求头、请求体
- 服务器怎么响应HTTP请求?
首先服务器会返回响应行,包括协议版本和状态码。状态码2开头是成功,3开头是重定向。如果需要重定向,服务器会发送一个响应行,告诉浏览器请求另一个地址
- HTTP中有哪些缓存?
答:DNS 缓存和页面资源缓存
页面资源是这样缓存的,首先根据返回的数据会带着缓存的时间,如果下次请求缓存没有过期,则数据可以直接使用。 如果过期了,可以像服务器询问资源是否被修改,如果没有修改也可以直接使用并更新缓存时间。
- 登录态是怎么保存的?
服务器会将需要存到cookie中的数据标识出来,下次请求可以直接带上
消息队列和事件循环
浏览器的进程需要处理各种事件,所以需要设计好消息队列和事件循环来保障任务的执行。
设计一个好的模型,需要考虑如下几个需求:
- 事务按顺序执行
- 线程执行过程中可以插入新的事件
- 当前线程可以接收其他线程发送过来的任务
- 当前进程可以接收其他进程发送的任务,并且交给主线程执行
- 提升消息队列的效率和实时性
消息队列:先进先出的数据结构,可以接收其他线程发送来的任务,按顺序处理
事件循环:可以不断的从消息队列中取出任务并执行
IO线程:接收网络进程和浏览器进程发送来的消息,并发送给渲染主线程
(未完待续ing)