10

如题,这是我从微博上看到的经典面试题,想发到SF上集思广益,整理出一套给力的答案。

再重复一遍:从输入URL到页面加载完成的过程中都发生了什么事情?

我的大致思路是:整个过程需要以HTTP过程为主线,把浏览器、OS、网络、后端MVC(暂时不计缓存)等都穿插进去。

求给力讨论。

a0z 2.1k
2014-05-01 提问

查看全部 12 个回答

13

已采纳

我来借花献佛 : 《What really happens when you navigate to a URL》
文章的大致内容如下:

  1. 输入地址
  2. 浏览器查找域名的 IP 地址
    这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存...
  3. 浏览器向 web 服务器发送一个 HTTP 请求
  4. 服务器的永久重定向响应(从 http://example.comhttp://www.example.com
  5. 浏览器跟踪重定向地址
  6. 服务器处理请求
  7. 服务器返回一个 HTTP 响应
  8. 浏览器显示 HTML
  9. 浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSSJS等等)
  10. 浏览器发送异步请求
8

需要考虑的事情还有很多,比如广播、拆包解包合并包丢包重传、路由表,NAT、TCP 状态机、CDN、HTTPS 证书校验与中间人攻击检测、RSA 密钥协商、AES 加解密、浏览器解析 HTTP 的有限自动状态机、GUI 库与绘图、OpenGL 绘图、GPU 加速(OpenCL 与 CUDA)、JIT(JavaScript 会把 JavaScript 代码编译成汇编代码)、服务器的数据库 NoSQL 或 SQL 查询、主从数据库同步、服务器和浏览器的内存管理(WebKit 实现的 fastMalloc(),服务器上可能是 TCMalloc 或者 JeMalloc)、服务器上的语言解释器(可能也是 JIT)、多媒体:傅里叶变换、H.264 解码(硬件解码,硬件解码的话 GPU 的处理单元又在计算.......或软件解码)、音频解码、WebGL 绘图、浏览器的 Sandbox、服务器的 SQL 注入检查、产生的键盘中断信号处理(或者是高级层面的输入输出驱动)、网卡驱动、网络栈的 TCP FastOpen、SYN Cookie 之类的技术、……

c88cc1a1 · 2014年05月01日

展开评论

推广链接