• 1
  • 0
分享
  • 输入url到页面加载都发生了什么事情?(一道软件测试面试题)
  • 恬恬圈 2020-01-08 13:05:12 字数 2653 阅读 2465 收藏 0

输入url到页面加载都发生了什么事情?这是一道软件测试面试题,且相关知识其实还有多种问法:

Question 1请讲一下tcp三次握手

OK等你把这个记好了,下次面试:

Question 2 tcp和http有什么区别??

Question 3 http和https区别?

Question 4 http请求方法?

Question 5常见的返回状态码有哪些?都是什么含义?

。。。


一开始我也只是应付面试,去了解这些问题,但是发现自己并不能很好的理解。而在平时测试中需要定位前后端bug以及做接口测试都需要你对这些知识的了解。所以我用这个问题梳理了一下这些知识,加深自己理解,希望也对你有帮助。

输入url到页面加载整体流程概况如下:

1、浏览器的地址栏输入URL并按下回车。

2、浏览器查找当前URL的DNS缓存记录。

3、DNS解析URL对应的IP。

4、根据IP建立TCP连接(三次握手)。

5、HTTP发起请求。

6、服务器处理请求,浏览器接收HTTP响应。

7、渲染页面,构建DOM树。

8、关闭TCP连接(四次挥手)。


再来详细描述一下

一、举例输入  https://www.baidu.com/

这个域名由三部分组成:协议名、域名、端口号,这里端口是隐藏的默认端口号(HTTP默认端口80,HTTPS默认端口443。)。

协议:https

域名:www.baidu.com,用来定位网站的独一无二的名字

/这个是根目录,也就是说,通过网站名找到服务器,然后在服务器存放网页的根目录


二、DNS域名解析

域名解析的过程实际是将域名还原为IP地址的过程(这个过程可以大致了解一下就行):

①查询浏览器缓存是否有当前URL的DNS缓存记录

②操作系统缓存(如你在本地host文件中绑定了ip)

③查询本地域名服务器(大约80%的域名解析到这里就完成了,这台服务器一般在你的城市的某个角落)

以上还没完成域名解析,则本地域名服务器向其他根域名服务器继续发出查询...........


三、在获取到IP地址后建立tcp连接(三次握手通俗版)

第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。

第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。

第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。

到此整个建立连接的过程已经结束,接下来就是双方你一句我一句甚至同时交流传递信息的过程了。


四、浏览器向服务器发送HTTP请求

18300772-53dfd70d68439fe2.png

你可以点击F12查看请求方法

QQ截图20200106151816.jpg



五、浏览器接收响应

服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。

状态码主要包括以下部分:

1xx:指示信息–表示请求已接收,继续处理。

2xx:成功–表示请求已被成功接收、理解、接受。

3xx:重定向–要完成请求必须进行更进一步的操作。

4xx:客户端错误–请求有语法错误或请求无法实现。

5xx:服务器端错误–服务器未能实现合法的请求。

看到响应码500等5xx类型,一般是在开发人员在操作,不要着急提bug哦

响应头主要由Cache-Control、 Connection、Date、Pragma等组成。

响应体为服务器返回给浏览器的信息,主要由HTML,css,js,图片文件组成。

如下

QQ截图20200106151932.jpg


七、关闭TCP连接

四次挥手断开连接通俗版:

第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。

第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句话要给客户端说“我知道你说完了(ACK),我再说两句&*…%¥”…

第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。

第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端(网络不稳定或者其他因素引起的网络原因)。

所以默认时间定为两个通信的最大时间之和,超出这个时间就默认服务器端已经接收到了自己的确认信息,此时客户端就关闭自身连接,服务器端一旦接收到客户端发来的确定通知就立刻关闭服务器端的连接。

到此为止双方整个通信过程就此终结。

这里要声明一下:断开链接不一定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。


再来看一下这几个问题

Question 1请讲一下tcp三次握手

Question 2 tcp和http有什么区别??

http基于TCP连接

HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP

TCP是传输层(底层通讯协议),定义的是数据传输和连接方式的规范HTTP是应用层协议,定义的是传输数据的内容的规范

Question 3 http和https区别?

1、http明文传输,连接无状态;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。2、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。3、http端口80,https端口443。

HTTP:超文本传输协议。是一个客户端和服务器端请求和应答的标准,用于从服务器传输超文本到本地浏览器的传输协议。HTTPS:加了密的HTTP。HTTPS=HTTP+TLS或SSL,SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)

Question 4 http请求方法?

Question 5常见的返回状态码有哪些?都是什么含义?


本文为51Testing经授权转载,转载文章所包含的文字来源于作者:软件测试er。原文链接:https://www.jianshu.com/p/60085bf3d402。如因内容或版权等问题,请联系51Testing进行删除。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 前言       很多人在接触自动化测试时,都会听到关键字驱动这样的一个概念,但是在研究时却有些不太清楚这种驱动模式的设计及实现到底该如何着手去做。       关键字驱动,作为一种自动化测试框架的设计形式,在很早的时候就已经有提及过了。它的基本原理或者说构思就是将原本的自动化代码进行代码与数据的分离,再将分离出来的代码二次分离,形成所谓行为代码与测试代码,而后再经由数据内容驱动行为代码,生成测试代码。从而更加便捷地进行自动化测试代码的管理,以及提高自动化的复用性,让使用者更加容易理解和使用自动化(毕竟还是有很多很...
            0 1 1372
            分享
          • 前言爬虫与反爬虫,是一个很不阳光的行业。这里说的不阳光,有两个含义。第一是,这个行业是隐藏在地下的,一般很少被曝光出来。很多公司对外都不会宣称自己有爬虫团队,甚至隐瞒自己有反爬虫团队的事实。这可能是出于公司战略角度来看的,与技术无关。第二是,这个行业并不是一个很积极向上的行业。很多人在这个行业摸爬滚打了多年,积攒了大量的经验,但是悲哀的发现,这些经验很难兑换成闪光的简历。面试的时候,因为双方爬虫理念或者反爬虫理念不同,也很可能互不认可,影响自己的求职之路。本来程序员就有“文人相轻”的倾向,何况理念真的大不同。然而这就是程序员的宿命。不管这个行业有多么的不阳光,依然无法阻挡大量的人进入这个行业,...
            13 14 1745
            分享
          •   2022年度软件测试行业的趋势预测:如果你也想了解更多发展趋势,那就点击下方链接填写调查问卷吧!助力测试行业发展,还能获得精美礼包哦~链接:http://vote.51testing.com/  背景  在运用Python进行开发代码过程中,会遇到变量复制备份的场景,但并没有得到预期的结果,例如下面的例子:lista = ['a', 'b', [1, 2, 3]] listb = lista.copy() lista[2].append(4)   print(lista...
            0 0 1216
            分享
          •   什么是Docker  Docker按照通俗易懂的理解来说就是一个用来装应用的容器,就像可以把水装到杯子里,把饭装到碗里,把钱装到钱包里......  可以把网站放在Docker中,可以把任何想得到的程序放在Docker中。  Docker能解决的问题  环境配置的问题  软件开发最大的麻烦事之一,就是环境配置。  比如一个java web应用,运行起来需要一个操作系统,操作系统之上还需要jdk、tomcat、mysql、系统环境问题、配置问题,甚至jdk、tomcat版本问题都能导致程序运行失败。  所以Docker来了,它把操作系统、jdk、tomcat等全部放在集装箱里,再打...
            12 12 1947
            分享
          •   行业现在比较卷,只会功能测试我感觉迟早会被淘汰。  我看今年很多面试的不会自动化连面试机会都没有,我还招聘网上刷了刷,基本岗位都需要自动化测试技能呢。  为什么说只会功能测试会被淘汰呢?毕竟功能测试可能一个月就能学会,很多人自学,随便做做项目功能测试就会了,这样门槛就太低了,这类人群就会很庞大,所以竞争就会很激烈,然后企业肯定会拉高门槛的,所以才有了今年的行业内卷,大家都在竞争一个岗位,那么你不就得各种技术掌握的扎实才行吗?  作为软件测试来说,功能测试是作为测试人员的基本功,也是必不可少的,随着时间的推移,科技的发展,作为测试,不仅仅要有扎实的基础,还是要不断的提升自己,如果一直停留在原...
            0 0 466
            分享
      • 51testing软件测试圈微信