震惊!一个回车键的背后竟然隐藏着这样的秘密……

2017-06-08   出处: 搜狗测试  作/译者:zqzq  

什么?这怎么跟平时的风格完全是两个套路?嗯~我就知道各位看官是被标题吸引进来的。

人啊就是不知道,自己的命运就是不能预料。我是怎么都想不到我一个做测试的怎么就当起小编了呢?当时领导同志就跟我讲说:“小组已经决定了,由你来发文章”;我说还是另请高明吧,我也实在不是谦虚,但是领导同志就说大家都研究决定了… …当时我就念了两句……噢不对,写了这篇文章,就分享给大家。

好了,话不多说,上货。

这次我们一起讨论一个有意思的话题,那就是: 
当你在浏览器中输入www.sogou.com按下回车到最终展示出网页,发生了什么?

卧槽!看到这儿你是不是觉得这也能震惊?心中一万头草泥马奔过。这不就发了个请求吗?能发生什么?要是这样想,就有点图样图森破了,这个过程中实际上还是发生了很多事情的。我们来看几种不同版本的回答。

一、屌丝版

按下回车键之后,也没干别的,大概三件事: 
第一,浏览器发了一个http/https请求到服务器; 
第二,服务端对这个请求进行了处理并返回; 
第三,浏览器拿着服务端的返回进行解析和展示; 
如果说还有一点什么要注意的就是传输链路一定不能中断!这个对整个过程的影响是很大的。当然,还有其他一些别的,主要就是这三件事。

二、进阶版

这个当然就不止是三件小事这么简单了。 
1.首先咱们得让浏览器知道www.sogou.com是个什么吧?我们都知道,输入的这个东西叫URL。一个完整的url一般由协议(http、https、ftp等)、域名(就是www.sogou.com)、路径(就比如/test.html这种的)以及端口(比如80)组成,只有域名对浏览器而言已经够了,这个过程可以称为识别URL; 
2.识别完了,浏览器上哪儿请求这东西呢?浏览器必须知道他要请求的服务器的ip地址才能去发送请求。怎么得到ip地址呢?这个时候就要DNS(Domain Name System)出马了。可以简单理解DNS系统就是域名到ip的一个映射,浏览器拿着域名去查询,会得到这个域名对应的ip。这个过程我们成为DNS解析; 
3.封装http请求。我们以最常见的http请求来说,所谓封装http请求主要是按照http协议规定的格式去组装请求,包括请求方法、请求路径、请求的主机(host)以及其他的一些属性; 
4.http请求造好了,也拿到ip了。请求怎么发?我们知道TCP请求是面向连接的,也就是说在传输数据之前必须先建立连接,这个过程其实就是大家耳熟能详的TCP三次握手的过程。三次握手的过程是怎么样的想必大家已经非常熟悉,通俗地可以将三次握手的过程这样描述:

  • 客户端向服务器发送了一个建立连接的请求(您好,我想和你通信,连接一下呗~~);

  • 服务端收到请求后返回同意建立连接的信号(吼啊~Nice to meet you);

  • 客户端收到确认信号后,向服务端发送确认收到的信号(Nice to meet you,too)

这样,服务端和客户端就建立了连接可以进行通信了。


5.连接建立好了,这下可以去请求数据了。服务端会根据客户端发送过来的请求内容决定给客户端返回什么数据,最终把要返回的HTML数据放在response body中返回给客户端。客户端收到返回数据后,便开始解析HTML,然后渲染和展示网页,到这儿,可以理解为我们已经在屏幕上看到我们请求的网页了;

6.看到就完事了吗?当然不行~你忘了客户端和服务端还保持着一个TCP连接呢?这样可有点浪费资源了,反正现在也没货可传,还不如断开连接吧。这就是TCP协议中的四次挥手断开连接的过程,这个过程跟三次握手一样大家非常熟悉,可以如下通俗地描述:

  • 客户端向服务端发送一个断开连接的请求(我要的货都拿到了,现在我该走了~~);

  • 服务端向客户端发送一个确认收到请求的信号(吼啊,知道了);

  • 服务端向客户端发送断开的通知(这次我也该走了~);

  • 主机收到后断开连接并返回一个确认信号(好的,一路走好);服务端在收到这个确认信号后最终断开连接。

一个回车按下之后的大概过程也就如此了~好像基本可以讲得通,但是,真的就这么简单么?

三、旗舰版

小编一想到在这儿肯定得写更多的字,突然觉得双手好累(像干了什么坏事一样)。因此,列举一些问题,大家可以一起串一串。

  • 在键盘上敲一下回车,怎么电脑屏幕上的浏览器就有反应了呢?这是个什么过程?(麻烦哪位模拟电路数字电路比较牛逼的大神来解释解释~~);

  • 我们平时做测试的时候经常会配host,上面的过程怎么没有去检查host文件?(对了host文件是啥~~谁来给个科学解释~);

  • Scoket套接字是什么鬼?干嘛用的?

  • 请求发出的时候,这个数据包在网络环境中怎么传输的?(比如我在小黑屋里逛淘宝,按了回车,这个请求是怎么从我的小黑屋给送到淘宝的服务器的);

  • 浏览器拿到返回的HTML之后,怎么解析的又是怎么渲染的?是全部拿回来了才处理还是只要有一点儿货返回就处理?

  • 为什么我们输入www.google.com并按下回车的时候,会提示“无法访问此网站”?

  • … …

小编感觉有点害怕,这要铺开了讲,我担心我的双手会废掉。所以小伙伴们就自己捋一捋吧,等把旗舰版的问题都搞清楚了,这个过程也大概差不多了。

期待大家留言补充那些按下回车键背后的细节和不为人知的秘密哦~

很惭愧,就做了一点微小的工作,谢谢大家。


欢迎给测试窝投稿或参与内容翻译工作,请邮件至editors@testwo.com。也欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,并与我们的编辑和其他窝友交流。
155°|1555 人阅读|0 条评论

登录 后发表评论