• 1
  • 0
分享
  • 输入url到页面加载都发生了什么事情?(一道软件测试面试题)
  • 恬恬圈 2020-01-08 13:05:12 字数 2653 阅读 2446 收藏 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进行删除。

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 读者提问:『性能测试准备测试数据,我是从数据库中把数据提取出来,放在 TXT 中,是否需要直接从数据库中访问数据,这两者得到的性能测试结果差异大吗,应该以哪个为准呢 ?』阿常回答:数据量较小的情况,数据放在 TXT 中或是从数据库中读取,区别不大。数据量较大的情况,从 TXT 读取内存消耗会很大,会影响性能,从而影响我们最终对服务器性能的判断了。另外,数据放在 TXT 中可能会存在数据格式转换的问题,直接读取数据库反而方便一点。阿常碎碎念:总结以上,数据量小两种方式皆可,数据量大建议读取数据库。看完今天的分享对你是不是有所启发呢,有任何想法都欢迎大家后台私信阿常,一起探讨交流
            0 0 829
            分享
          • 一.兼容性测试直播的兼容性测试则是在不同的机型、不同的系统、不同的分辨率以及不同网络环境下测试是否可以正常开播,进入直播间观看直播、发送消息并且在直播结束时可以正常跳转到直播结束页面进行相关操作。图1.1 兼容性测试二.性能测试针对直播间的性能测试主要涉及到以下几个方面:图2.1 性能测试CPU:iOS可以使用instruments中的Activity Monitor帮助测试。Android可以利用Android Studio 自带 CPU检测功能进行测试 。内存:iOS可以使用instruments的 Leaks、Activity Monitor 、Allocations 、Zombies帮...
            14 14 1536
            分享
          •   EasyModeling 是我在2021年圣诞假期期间开发的一个 Java 注解处理器,采用 Apache-2.0 开源协议。它可以帮助 Java 单元测试的编写者快速构造用于测试的数据模型实例,简化 Java 项目在单元测试中准备测试数据的工作,在提高编写效率的同时,使单元测试更加整洁易读。经过一年的维护,EasyModeling 已经在几个 Thoughtworks 内部的项目上得到了应用,并迭代发布了几个版本。  单元测试中的数据准备的困难  在企业级应用软件开发项目中编写测试代码时,针对特定的测试场景,我们需要准备相应的测试数据,以验证被测组件在给定输入下的行为。在使用 Java ...
            0 0 531
            分享
          • 新人和实习生应该怎么安排?他们胜在年轻,有自己的想法,是未来的希望。新人来的前一周,基本是在公司的培训中度过等到了部门之后,就开始负责人领上路了,这里有一个大致思路:【第一阶段】:开通各种账号,提供测试环境账号,介绍业务结构,开始熟悉业务模块和测试流程(一周),讲明日报,周报要求     开通bug系统的账号,提供测试环境地址和账号,提供原型文档     介绍公司背景,产品组成,版本测试模式,提bug方法,(实习生还需要学习如何判定bug)。     比如我们公司是做什么的,软件测试岗位的职责是发现问题,...
            5 5 8283
            分享
          •   一、避免去外包公司  基于行业影响,企业需要降低成本,会更倾向于使用外包。大公司使用外包的结果就是外包市场会进一步发展,这些发展会进一步推动企业裁员的进程。如果外包能够搞定很多事情,外包的价格又比较低,很明显很多低级的工作会更倾向于使用外包的。  外包公司的本质是通过提供廉价劳动力赚取剪刀差的一种公司。你拿到的收入,已经被扣除了一部分了。所以你进入这样的公司,既没有办法接触到业务核心,公司也不会提供很好的培训,也没有很好的经验积累,也没有进入更深的测试实践,所以在这里面的成长会面临发展困境。  如果你现在在外包公司,建议你待个一年两年就立马要走,千万不要留的太久,不然将来会面临很大的发展问...
            0 0 624
            分享
      • 51testing软件测试圈微信