美文网首页
当我输入一行URL之后,世界发生了什么改变...

当我输入一行URL之后,世界发生了什么改变...

作者: 你滴止痛药儿 | 来源:发表于2018-09-12 13:04 被阅读0次
世界这么大,我们在何处?

从宇宙的最远端,到各大星系,再到其中的银河系、太阳系,跨过海王星、天王星、土星、木星、火星,最终在地球上找到了我们自己的身影,宇宙如此浩瀚,我们该如何定位自己?

坐在公司的办公桌上,我不禁开始思考自己的价值,百思不得解的我打算上网查一查,世界之大,如何自居?

打开浏览器,输入www.baidu.com,回车。


在我按下回车并眨了一下眼的一刹那:

  • 域名解析
  • TCP连接
  • 浏览器向服务器发送HTTP请求,服务器返回HTTP响应
  • 绘制网页
域名解析
  1. 我的电脑懵逼了,它不认识我输入的一大堆字母。它需要将域名解析成IP地址。
  2. 于是他向本地DNS服务器发出一个DNS请求。
  3. 到达本地DNS服务器之后——查找浏览器缓存,没有
  4. 查找操作系统缓存(本地host文件),没有
  5. 查找路由器缓存,没有
  6. 查找ISP(Internet Service Provider) DNS 缓存,没有
  7. 迭代查询,找到了!
  • 本地 DNS服务器将该请求转发到互联网上的根域(根域没有名字,在DNS系统中就用一个空字符串来表示。例如www.baidu.com.现在的DNS系统都不会要求域名以.来结束,即www.baidu.com就可以解析了,但是现在很多DNS解析服务商还是会要求在填写DNS记录的时候以.来结尾域名。)
  • 根域将所要查询域名中的顶级域(比如要查询www.baidu,com,该域名的顶级域就是com)的服务器IP地址返回到本地DNS。
  • 本地DNS根据返回的IP地址,再向顶级域(就是com域)发送请求, com域服务器再将域名中的二级域(即www.baidu.com中的baidu.com)的IP地址返回给本地DNS。
  • 本地DNS再向二级域发送请求进行查询。
  • 之后不断重复这样的过程,直到本地DNS服务器得到最终的查询结果,并返回到主机。这时候主机才能通过域名访问该网站。
    (作者:Moorez 链接:https://www.jianshu.com/p/fc957e25102e 來源:简书)
  1. 当查找到对应的IP地址之后,通过IP地址查找到对应的服务器,浏览器将用户发起的http请求发送给服务器。
TCP连接

在通过第一步的DNS域名解析后,获取到了服务器的IP地址,在获取到IP地址后,便会开始建立一次连接,这是由TCP协议完成的,主要通过三次握手进行连接。

  • 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;

  • 第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

  • 第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。


WechatIMG1010.png
浏览器向服务器发送HTTP请求,服务器返回HTTP响应

建立连接后,会发送一个HTTP请求,HTTP请求包含的信息可以分成如下三部分:

  • 请求行(包含请求的方法、URL地址和协议版本)
  • 请求头(Request Header)
  • 请求正文

经过上面的几个步骤,服务器收到客户端请求,并已经处理,这时候需要把处理结果返回,也就是返回一个HTTP响应。
HTTP响应与HTTP请求类似,也包括如下三个部分:

  • 状态行 (协议版本、代表状态的数字码以及状态描述,各元素之间以空格隔开)
  • 响应头 (由关键字/值对组成,每行一对,关键字和值用英文冒号”:”分隔)
  • 响应正文 (包含着我们需要的一些具体信息,比如cookie,html,image,后端返回的请求数据等等)
绘制网页
  • 解析HTML,构建DOM树
  • 解析CSS,生成规则树
  • 合并DOM树和CSS结构树,生成render tree
    在浏览器还没接收到完整的 HTML 文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送 HTTP 请求重复上述的步骤。在收到 CSS 文件后会对已经渲染的页面重新渲染,加入它们应有的样式,图片文件加载完立刻显示在相应位置。这里就涉及了两个重要概念:Reflow和Repaint。(回流重绘请看我另一篇简书)

在我眨完眼时,百度干净简洁的搜索界面已经呈现出来了,我依然浑浑噩噩,不知自己在世界上的定位,只能在人类创造的网络上面寻找答案,学习知识。

我听闻宇宙还在膨胀变大,变得更深邃,我知道我在简书上写完这篇文章,点击发布文章之后,庞大的互联网,会有一些改变,会多出这一篇文章。其他人输入这个url,文章就会显示给他。但我不知道宇宙的变大是什么在操纵呢?

我相信每一个程序员都坚信——我们改变世界。

相关文章

网友评论

      本文标题:当我输入一行URL之后,世界发生了什么改变...

      本文链接:https://www.haomeiwen.com/subject/bzgmgftx.html