Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

从 URL 输入到页面展现发生了什么?经典题 #5

Open
jirengu opened this issue Dec 27, 2016 · 4 comments
Open

从 URL 输入到页面展现发生了什么?经典题 #5

jirengu opened this issue Dec 27, 2016 · 4 comments

Comments

@jirengu
Copy link
Owner

jirengu commented Dec 27, 2016

问题:从 URL 输入到页面展现发生了什么?

Tips:
经典题目,可以多查阅些资料

偏离 Web 的答案没必要写

@Author-dy
Copy link

分为4个步骤:

  • 当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址。
  • 浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。
  • 一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应

此时,Web服务器提供资源服务,客户端开始下载资源。

请求返回后,便进入了我们关注的前端模块
简单来说,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,而javascript又可以根据DOM API操作DOM

另外线程与进程:

  • 一个程序至少有一个进程,一个进程至少有一个线程
  • 线程的划分尺度小于进程,使得多线程程序的并发性高
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
  • 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
  • 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配

@RookieDay
Copy link

今日复习找见的一点资料,有什么问题还望指正 ^_^

  1. igoro上的回答
  2. 文章翻译
  3. stackoverflow高票回答

@tangxiaolang101
Copy link

@Power-kxLee
Copy link

Power-kxLee commented Jul 25, 2017

个人见解

  • 客户端查看缓存文件
  • 域名解析出 协议、主机、端口
  • 组装http(get)请求报文
  • 获取服务器ip地址
  • 客户端建立TCP连接.进行三次握手
  • 建立连接后发送http请求
  • 服务器接收并解析,将请求转发到服务程序
  • 服务器检查请求头是否有缓存信息 有就返回304之类码
  • 服务器处理程序.并准备http响应.有数据库的操作数据库
  • 服务器响应报文并通过建立TCP返回到客户端
  • 客户端接收http请求.关闭TCP连接或者保留重用
  • 客户端检查状态码
  • 有缓存资源 进行缓存
  • 对状态码进行解码(比如gzip压缩等)
  • 对资源类型决定如何处理(暂定为HTML文档)
  • 解析HTML文档
  • 构建DOM数
  • 解析过程中遇到相关资源(css.js img)等进行下载
  • 构建渲染
  • 显示页面

显示页面的大概流程.我个人有个更加粗暴的建议能够更好的理解

客户端是男的 服务器是女的

前戏 -> 插入 -> 搅动 -> 拔出 -> 幸福生活

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants