看到 这篇文章,重拾计算机网络的知识,决定班门弄斧写一篇浏览器
下面的讨论基于最简单的情景:HTTP、无代理、不讨论功夫王、IPv4,并简单得从三个方面阐述。缓存
浏览器会作些什么
- 接收 URL,并拆分红协议,网络地址,资源路径
- 与缓存进行比对,若是请求的对象在缓存中,则直接进行第九步
- 若是网络地址不是一个 IP 地址,向操做系统询问,操做系统返回一个IP地址
- 浏览器向服务器发起一个 TCP 链接
- 浏览器经过 TCP 链接向服务器发起 HTTP 请求,HTTP 三次握手,HTTPS 握手过程则复杂得多
- 浏览器接受 HTTP 响应,这时候它能关闭 TCP 链接也能为另外一个链接保留。
- 检查 HTTP header 里的状态码,并作出不一样的处理方式。好比:错误(
4XX
、5XX
),重定向(3XX
),受权请求(2XX
)
- 若是是能够缓存的,这个响应则会被存储起来
- 浏览器进行解码响应,并决定如何处理该响应(好比HTML页面,图像,声音等等)
- 浏览器渲染响应,或者为不能识别的类型提供下载的提示框
浏览器主要组件:服务器

操做系统会作些什么
客户端
- 检查域名是否在本地的 host 的文件中,在则直接返回 IP 地址,不在则向 DNS 服务器请求
- DNS 服务器一级一级往上查询,直到查询到 IP 地址
服务器端
- 验证链接是否合法,如客户端 IP 地址是否符合防火墙的规则,端口号是否开启等
- 将请求转发到相应的端口
- 记录相应事件
Web 服务器会作些什么
- 创建链接:接受一个客户端,或者若是不但愿与这个客户端不能简历链接,就将其关闭
- 接收请求:从网络中读取一条 HTTP 请求报文
- 处理请求:对请求报文进行解释,并采起行动
- 访问资源:访问报文中指定的资源
- 构建响应:建立带有正确首部的 HTTP 响应报文
- 发送响应:将响应回送给客户端
- 记录事务处理过程:将已完成事务相关的内容记录在一个日志文件中

输入 URL 便能浏览互联网,其背后的计算机系统却要完成无数工做。上述过程当中的每一步的背后都蕴含着无数人的智慧,每一步均可以展开成庞大的课题,真实的情景也要比提到的复杂不少。我想这正是科技最大的魅力,身处其中并得益于此,感谢各个领域的无数工程师为此付出的努力。网络